如何在Android中使用矩形绘制onTouchEvent?

时间:2014-01-22 04:44:26

标签: java android ontouchevent ondraw

我一直致力于游戏,只需在用户触摸屏幕时创建一个矩形,我不知道如何让touchEvent的X坐标和Y坐标成为我的rects的“浮动”,每次我放一个在X,Y坐标中浮点数表示“(float,float,int,int)中没有适用的构造函数”。我不知道这意味着什么。

    public class GameBoard extends View {

    private ArrayList<Rect> rectangles = new ArrayList<Rect>();

    public GameBoard(Context context) {
        super(context);

    }
    @Override
    public boolean onTouchEvent (MotionEvent event) {
        float xCoor = event.getX();
        float yCoor = event.getY();

        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                rectangles.add(new Rect(xCoor, yCoor, 10, 40));
                break;
        }
        return true;
    }
    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.BLUE);
        for (Rect rect : rectangles) {
            canvas.drawRect(rect, paint);
        }
    }
}

4 个答案:

答案 0 :(得分:0)

您正在使用Rect作为int值,

相反,您可以使用RectF作为浮动值

new RectF(xCoor, yCoor, 10, 40)

答案 1 :(得分:0)

请参阅Rect的Constructor

 public Rect(int,int,int,int);

期望所有参数都为int

您需要将floatint

的x和y值进行类型转换
    int xCoor = (int)event.getX();
    int yCoor = (int)event.getY();

答案 2 :(得分:0)

try to use this ::->     


 DrawingImage = (ImageView) this.findViewById(R.id.DrawingImageView1);

        Bitmap bitmap = Bitmap.createBitmap((int) getWindowManager()
            .getDefaultDisplay().getWidth(), (int) getWindowManager()
            .getDefaultDisplay().getHeight(), Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(bitmap);
        DrawingImage.setImageBitmap(bitmap);

        // Draw Rectangle

        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setStyle(Paint.Style.FILL_AND_STROKE);
        paint.setStrokeWidth(10);

        float left = 20;
        float top = 20;
        float right = 50;
        float bottom = 100;

        canvas.drawRect(left, top, right, bottom, paint);

答案 3 :(得分:0)

通过调用构造函数Rect,将新的Rect添加到ArrayList中。 new Rect告诉Java创建一个新的Rect对象。

构造函数就像一个方法,除了它与它所在的类具有相同的名称。恰好,Rect类没有一个带浮点作为其参数的构造函数。

因此,在将浮点数传递给Rect构造函数之前,必须将浮点数转换为整数。

int xCoor = (int) event.getX();
int yCoor = (int) event.getY();

另请注意,当您进行转换(转换从一种类型转换为另一种类型)时,该值只会向下舍入到最接近的整数。事实上,小数点之后的任何内容都会被丢弃。

我认为如果你的Android开发取得成功,你最好能够获得一本关于Java的面向对象编程的优秀教科书。