0

我在画布上绘制了位图图像。

Bitmap image = BitmapFactory.decodeResource(getResources(), R.drawable.sq);
        canvas.drawColor(color.black);  
        Rect dstRectForRender = new Rect(0,0,320,450);               
        canvas.drawBitmap(image, null,dstRectForRender,null);   

该图像根据我在 cnavs 上的屏幕显示。在我的触摸输入上,我需要传递图像的 x 和 y 坐标位置,并用颜色填充该像素,以显示图像是在拖动事件上绘制的。如何传递 x 和 y 坐标参数?我应该使用哪些函数来绘制图像上的像素?我感谢你的帮助和甜蜜的时光。

4

1 回答 1

0

我不确定这是否是最好的方法,但是如果您定义自己的子类ImageView并将其命名为DrawableImageView. 您必须确保从 实现所有基本构造函数ImageView,然后覆盖该onTouchEvent方法。从该事件中,您可以获取触摸坐标并将它们存储在一个中ArrayList<Point>,并通过覆盖该onDraw方法并“绘制”图像来使用该 ArrayList。

public class DrawableImageView extends ImageView {

ArrayList<Point> list = new ArrayList<Point>();    

//constructors..

@Override
public boolean onTouchEvent (MotionEvent event) {
    float x = event.getX();
    float y = event.getY();
    list.add(new Point(x,y));
    invalidate();
}

这只是关于如何开始你的课程的一个非常简短的概述,可能不是最准确的做事方式(取决于你的具体代码)。现在,不是<ImageView>在您的 xml 中使用标签(或者,以编程方式加载 ImageView),而是像这样引用您的子类:

<your.package.name.DrawableImageView
/>

编辑

针对您的评论,没有预先确定的方式来绘制图像。你必须自己实现,这就是为什么我建议存储Points在 ArrayList 中。我不确定您要在这里实现什么,但是要在您必须覆盖的图像上绘制(例如)黑点onDraw

public void onDraw(Canvas c) {
    super.onDraw(c);
    for(Point p : list) {

        //Draw black point at x and y.. I'm posting from my cell so I can't go into much detail
   }
}

此外,要强制视图重绘自身,您需要使用invalidate()您的方法onTouchEvent()(我在上面添加)。

于 2012-12-08T23:21:21.533 回答