有一个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不能加载多张图片么?这两个方法的区别是什么?

解决方案 »

  1.   

    两个方法的调用是一样的啊!
    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()
      

  2.   

    但为啥用setImageDrawable不行,用setImageResource就可以