【问题标题】:Clicking on a bitmap in Android Canvas在 Android Canvas 中单击位图
【发布时间】:2011-05-07 16:56:35
【问题描述】:

我在设置 (x,y) 坐标边界以检测何时单击特定位图时遇到了一些困难。

例如,如果位图的位置是 (100,300),比如说。即左上角在这个点,那么如果用户在(X,Y)点触摸屏幕,那么简单的条件:

if((Math.abs(X-midX)<bitmap.getWidth()/2)&&
           Math.abs(Y-midY)<bitmap.getHeight()<bitmap.getHeight()/2){

                  //the bitmap has been clicked on
}

midX 定义为 (100+(100+bitmap.getWidth()))/2 即中间 x 点和 midY 的类似定义。

这是正确的方法吗?因为当我尝试触摸/单击它们时,我的一些位图的行为与我预期的不同。

【问题讨论】:

    标签: android canvas bitmap


    【解决方案1】:

    虽然我喜欢做这种数学,但这次我建议采用“简单的方法”。使用您的图像边界设置 Rect/RectF 并改用 rectF.contains(float x, float y)rect.contains(int x, int y)。也就是说,如果 onClick 在这里不是一个选项,当然。

    【讨论】:

      【解决方案2】:

      如果您的位图位于ImageView 中,您应该能够处理OnClickListener 以便视图知道何时选择了位图。

      【讨论】:

      • 它不在图像视图中。它是在画布上绘制的。
      【解决方案3】:

      另一种方法是将 Bitmap 放在 Drawable 中并使用它来测试边界:

      public boolean onSingleTap(MotionEvent event)
      {
         int x = (int) event.getX();
         int y = (int) event.getY();
      
         if (drawable.getBounds().contains(x, y))
         {
            // You’ve tapped the Bitmap...
         }
      }
      

      【讨论】:

      • 我们可以使用原生方法 onTouchEvent (MotionEvent event) 代替 onSingleTap(MotionEvent event)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      • 2012-05-14
      • 2021-04-02
      • 1970-01-01
      • 2021-10-06
      • 2018-08-25
      • 2016-12-02
      相关资源
      最近更新 更多