在触摸事件的画布上重绘图像?

时间:2011-01-21 11:29:09

标签: android android-layout

我正在尝试在onTouch事件上重绘画布上的图像。我能够在画布上绘制图像,但我希望图像能够在特定的x,y上重绘。

protected void onDraw(Canvas canvas)

{

     mBitmap1   = BitmapFactory.decodeResource(getResources(), R.drawable.ab);
 mBitmap2   = BitmapFactory.decodeResource(getResources(), R.drawable.ab);
 this.canvas=canvas;

     Paint p = new Paint();
    p.setColor(Color.parseColor("#FFFFFF"));

    canvas.drawLine(x1, y1, x2 , y2, p);
    canvas.drawBitmap(mBitmap1, 70, 60, null);
    canvas.drawBitmap(mBitmap1, 185, 60, null);
}


    @Override
    public boolean onTouch(View v, MotionEvent event) {
        final int x=(int)event.getX();
        Log.i("***********xPos","="+x);
        final int y=(int)event.getY();
        Log.i("***********yPos","="+y);

        if(event.getAction()==MotionEvent.ACTION_UP)
        {

        }
        if(event.getAction()==MotionEvent.ACTION_DOWN)
        {
            canvas.drawBitmap(mBitmap1,50+x,60,null );
            this.postInvalidate();

        }
        if(event.getAction()==MotionEvent.ACTION_MOVE)
        {

        }
        return false;
    }

2 个答案:

答案 0 :(得分:3)

好吧我想我知道你的问题是什么is.you ae调用postinvalidate()方法每次当action.down调用时它调用最终调用ondraw()。好吧它会在位图上重绘它为你的paricaular setted值再次投入


所以你看起来它保持不变。


确定按照以下步骤操作:


1:使用一些公共变量在x和y轴的ondraw方法中绘制位图,让我们说initx和inity


2:比触摸事件:通过将x和y值添加到initx和inity resp来更新此值。


像:INITX = INITX + X; inity这= inity这+ Y; 并且最后在阳离子向下事件中调用post.invalidate或ondraw方法。它会对你有用

答案 1 :(得分:0)

请参阅MotionEvent类,该类提供用户触摸屏幕的位置坐标。