下面的畫畫板的代碼:
public class MainActivity extends Activity {
private ImageView iv;
private Bitmap baseBitmap;
private Canvas canvas;
private Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iv = (ImageView)findViewById(R.id.iv);
paint = new Paint();
paint.setStrokeWidth(5);//畫筆的像素
paint.setColor(Color.BLACK);//畫筆的顏色
//此時ImageView iv還爲被創建,所以爲0,報錯
//一般情況下直接指定
baseBitmap = Bitmap.createBitmap(320,
350, Config.RGB_565);
canvas = new Canvas(baseBitmap);
canvas.drawColor(Color.RED);
//用戶在屏幕上移動的軌跡
iv.setOnTouchListener(new OnTouchListener() {
//定義手指開始位置的座標
int startX;
int startY;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()){
case MotionEvent.ACTION_DOWN://手指第一次接觸屏幕
//創建一個可以被修改的Bitmap
System.out.println("手指按下");
System.out.println(iv.getWidth());
System.out.println(iv.getHeight());
startX = (int) event.getX();
startY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE://手指在屏幕上滑動
System.out.println("手指移動");
int newX = (int) event.getX();
int newY = (int) event.getY();
canvas.drawLine(startX, startY, newX, newY, paint);
//實時更新起始點
startX = (int) event.getX();
startY = (int) event.getY();
iv.setImageBitmap(baseBitmap);
break;
case MotionEvent.ACTION_UP://手指離開屏幕
System.out.println("手指擡起");
break;
}
return true;//持續響應觸摸時間,true
}
});
}
public void save(View view){
}
}
當在屏幕上畫畫時,鼠標和劃線是錯位的。
解決:
1,獲取屏幕的的座標應該用getX(),getY()方法。
2,定義的Bitmap添加在ImageView上不可以縮放或放大,也就是說bitmap指定的寬高要使得bitmap剛好充滿ImageView的大小,因爲,setImageBitmap方法默認會使bitmap充滿整個ImageView。
那麼如何獲得ImageView的大小呢?
在onTouchListener方法中,ImageView已經存在了,可以在該方法中輸出iv.getWidth(),iv.getHeight(),就知道了
3.最好是在配置文件裏將ImageView設置成wrap_content