我有一个ImageView
和一个按钮以及两个图像。单击该按钮可切换ImageView
中的图像。
这是代码
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(this );
flag = true;
imageView1 = (ImageView ) findViewById(R.id.imageView1);
imageView1.setImageResource(R.drawable.off);
}
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
// imageView1.setImageResource(R.id.);
//imageView1.setImageResource(R.drawable.off_widget);
flag= !flag;
if( flag == true )
{
imageView1.setImageResource(R.drawable.off);
}
else
{
imageView1.setImageResource(R.drawable.on);
}
但是加载时间非常长。图像的大小分别为188 KB和110 KB。我能做些什么来减少加载时间?
这里的问题不在于加载时间,即使是200KB的图像也没有那么大。您的GUI实际上会因加载图像而冻结很短时间(加载图像所需的时间)。这会导致切换。
防止GUI冻结的最佳实践是将图像加载到AsyncTask
中作为Drawable
,然后将其分配给ImageView
。你可以在这里找到一个代码示例。您只需从onCreate(...)
或onStart(...)
调用该任务。将Drawable
从AsyncTask
转移到主活动的另一个最佳实践是使用Observer模式,其中AsyncTask
是Observer,而主活动是Observable。Android已经为此提供了prober类。您也可以在这里找到一个代码示例。
您将断断续续的图像存储在哪里?您是否为每个屏幕密度创建了缩放版本?
当您将100kb的图像添加到drawable目录(而不是drawable-)时,该图像将被视为mdpi图像,因此会根据设备的密度进行缩放。因此,drawable目录中的png在xxhdpi设备上占用的内存要比100kb多得多。