zoukankan      html  css  js  c++  java
  • 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(),就知道了

  • 相关阅读:
    富文本编辑器layedit,调用setContent方法会报错
    sqlserver2008事务日志已满
    解决asp.net上传文件时文件太大导致的错误
    完美版js金钱正则表达式校验
    jQuery实现清空table表格除首行外的所有数据
    textArea中的maxlength是无效的 解决办法
    jquery根据name属性查找
    fileupload页面跳转找不到原页面的解决方法
    xml获取属性值的方法
    读FCL源码系列之List<T>---让你知其所以然---内含疑问求大神指点
  • 原文地址:https://www.cnblogs.com/riskyer/p/3306316.html
Copyright © 2011-2022 走看看