【问题标题】:How to make rectangles draw onTouchEvent in Android?如何让矩形在 Android 中绘制 onTouchEvent?
【发布时间】:2014-01-22 04:44:25
【问题描述】:

我一直在开发游戏,它只是在用户触摸屏幕时创建一个矩形,我不知道如何让 touchEvent 的 X 坐标和 Y 坐标成为我的矩形的“浮动”,每次我放一个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);
        }
    }
}

【问题讨论】:

    标签: java android touch-event ondraw


    【解决方案1】:

    您正在通过调用构造函数 Rect 向 ArrayList 添加一个新的 Rect。 new Rect 告诉 Java 创建一个新的 Rect 对象。

    构造函数类似于方法,只是它与所在的类同名。恰好 Rect 类没有以浮点数作为参数的构造函数。

    所以在将浮点数传递给 Rect 构造函数之前,您必须将它们转换为整数。

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

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

    我认为,如果您要在 Android 开发方面取得成功,最好获得一本关于 Java 面向对象编程的好教科书。

    【讨论】:

    • 我非常感谢您对“铸造”的解释,现在我知道为什么它永远不会使用小数了
    【解决方案2】:

    您正在使用 Rect 作为 int 值,

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

    new RectF(xCoor, yCoor, 10, 40)
    

    【讨论】:

      【解决方案3】:

      见Rect的Constructor

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

      期望所有参数都是int

      您需要将 x 和 y 值从 float 转换为 int

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

      【讨论】:

        【解决方案4】:
        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);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多