下面的画画板的代码:
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