有一个ImageView,通过触击循环加载本地文件夹里的三张图片package my.packag.ex5_1;import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.Toast;public class Ex5_1Activity extends Activity{
/** Called when the activity is first created. */
private int index = 0;
private ImageView iv;
int[] image = {
R.drawable.i1,
R.drawable.i2,
R.drawable.i3
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iv = (ImageView)findViewById(R.id.imageView1);
iv.setOnTouchListener(new MyListener());
}
class MyListener implements OnTouchListener{
@Override
public boolean onTouch(View v, MotionEvent event){
index = (++index) % 3;
Toast.makeText(Ex5_1Activity.this, index + "", Toast.LENGTH_SHORT).show();
//iv.setImageResource(image[index]);
iv.setImageDrawable(getResources().getDrawable(image[index]));
return false;
}
}
}
更换了一次图片后再触击一下屏幕后程序崩溃。但是把setImageDrawable换成setImageResource(注释掉的那行)就没有这个问题。setImageDrawable不能加载多张图片么?这两个方法的区别是什么?
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.Toast;public class Ex5_1Activity extends Activity{
/** Called when the activity is first created. */
private int index = 0;
private ImageView iv;
int[] image = {
R.drawable.i1,
R.drawable.i2,
R.drawable.i3
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
iv = (ImageView)findViewById(R.id.imageView1);
iv.setOnTouchListener(new MyListener());
}
class MyListener implements OnTouchListener{
@Override
public boolean onTouch(View v, MotionEvent event){
index = (++index) % 3;
Toast.makeText(Ex5_1Activity.this, index + "", Toast.LENGTH_SHORT).show();
//iv.setImageResource(image[index]);
iv.setImageDrawable(getResources().getDrawable(image[index]));
return false;
}
}
}
更换了一次图片后再触击一下屏幕后程序崩溃。但是把setImageDrawable换成setImageResource(注释掉的那行)就没有这个问题。setImageDrawable不能加载多张图片么?这两个方法的区别是什么?
public void setImageDrawable(Drawable drawable) {
if (mDrawable != drawable) {
mResource = 0;
mUri = null;
updateDrawable(drawable);
requestLayout();
invalidate();
}
}if (mUri != null || mResource != resId) {
updateDrawable(null);
mResource = resId;
mUri = null;
resolveUri();
requestLayout();
invalidate();
}
resolveUri();这个又调用了updateDrawable()