当前位置: 代码迷 >> Android >> android画笔错位有关问题的解决
  详细解决方案

android画笔错位有关问题的解决

热度:103   发布时间:2016-04-28 08:13:42.0
android画笔错位问题的解决

下面的画画板的代码:

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



  相关解决方案