Android 无法使用画布在imageview上绘制线

Android 无法使用画布在imageview上绘制线,android,canvas,imageview,Android,Canvas,Imageview,我无法在imagview上划清界限。下面是我的代码 public class MainActivity extends Activity implements OnTouchListener { private Paint mPaint; private ImageView img; private Bitmap newBitmap; float downx = 0; float downy = 0; float upx = 0

我无法在imagview上划清界限。下面是我的代码

 public class MainActivity extends Activity implements OnTouchListener {

    private Paint mPaint;
    private ImageView img;
    private Bitmap newBitmap;


      float downx = 0;
      float downy = 0;
      float upx = 0;
      float upy = 0;
    private Canvas newCanvas;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        img = (ImageView)findViewById(R.id.imageView1);

        img.setOnTouchListener(this);


        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        mPaint.setColor(0xFFFF0000);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(12);

        Bitmap bitmap = ((BitmapDrawable)img.getDrawable()).getBitmap();

        Config config = bitmap.getConfig();
        if(config == null){
         config = Bitmap.Config.ARGB_8888;
        }

        newBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), config);

        newCanvas = new Canvas(newBitmap);

        newCanvas.drawBitmap(bitmap, 0, 0,mPaint);

        img.setImageBitmap(newBitmap);



    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
     public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();
        switch (action) {
        case MotionEvent.ACTION_DOWN:
          downx = event.getX();
          downy = event.getY();
          break;
        case MotionEvent.ACTION_MOVE:
          upx = event.getX();
          upy = event.getY();
     //    newCanvas.drawLine(downx, downy, upx, upy, mPaint);
          img.invalidate();
          downx = upx;
          downy = upy;
          break;
        case MotionEvent.ACTION_UP:
          upx = event.getX();
          upy = event.getY();
          newCanvas.drawLine(downx, downy, upx, upy, mPaint);
          img.invalidate();
          break;
        case MotionEvent.ACTION_CANCEL:
          break;
        default:
          break;
        }
        return true;
      }

}

请帮我解决这个问题。提前谢谢。

触摸坐标和位图坐标不一定相同。试着触摸屏幕的最上角,看看当你抬起手指时它是否对位图有任何影响。试着对动作的情况进行注释。移动时,你正在重置开始坐标,因此开始坐标和结束坐标可能相同。在拉线前放一根圆木,打印出所有坐标。如果通过扩展view类而不是ImageView来使用自定义视图,也会更好。