java - 在 Canvas Android中触摸事件后在随机位置绘制矩形

标签 java android canvas

我试图在 Canvas 中的随机位置绘制一个矩形(不应超过 Canvas 尺寸),如果用户触摸该形状,它应该在另一个随机位置绘制。我已经设法绘制了矩形,但需要有关 Touch Event 的帮助,然后在随机位置绘制它。

public class DrawView extends View {
    Paint paint = new Paint();

    public DrawView(Context context) {
        super(context);            
    }

    @Override
    public void onDraw(Canvas canvas) {
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(3);
        canvas.drawRect(30, 30, 80, 80, paint);
        paint.setStrokeWidth(0);
        paint.setColor(Color.CYAN);
        canvas.drawRect(33, 60, 77, 77, paint );
        paint.setColor(Color.YELLOW);
        canvas.drawRect(33, 33, 77, 60, paint );

    }

}

我们将不胜感激。

最佳答案

你可以像下面给出的那样做:

例如

  public class DrawView extends View {

     // here you define hashmap for user touch points

      Paint paint = new Paint();

  public DrawView(Context context) {
      super(context);            
  }

  @Override
  public void onDraw(Canvas canvas) {
      yourRandomFunction(-99,-99);


  }

  public void yourRandomFunction(float x , float y ){
     //for first time user touch 
     // if -99 && -99 { 
    //Calculate random points here.

    paint.setColor(Color.BLACK);
    paint.setStrokeWidth(3);
    canvas.drawRect(30, 30, 80, 80, paint);
    paint.setStrokeWidth(0);
    paint.setColor(Color.CYAN);
    canvas.drawRect(33, 60, 77, 77, paint );
    paint.setColor(Color.YELLOW);
    canvas.drawRect(33, 33, 77, 60, paint );
    // add points to hashmap
}
//else check in hashmap if exist then {
  //Calculate random points here.
    paint.setColor(Color.BLACK);
    paint.setStrokeWidth(3);
    canvas.drawRect(30, 30, 80, 80, paint);
    paint.setStrokeWidth(0);
    paint.setColor(Color.CYAN);
    canvas.drawRect(33, 60, 77, 77, paint );
    paint.setColor(Color.YELLOW);
    canvas.drawRect(33, 33, 77, 60, paint );
    // add point to hashmap
 } 

}

@Override
public boolean onTouchEvent(MotionEvent event) {
      float eventX = event.getX();
       float eventY = event.getY();

    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
      //check points in hashmap 

      return true;
    case MotionEvent.ACTION_MOVE:

      break;
    case MotionEvent.ACTION_UP:
      // nothing to do
      yourRandomFuncntion(eventX,eventY);
      break;
    default:
      return false;
    }

    // Schedules a repaint.
    invalidate();
    return true;
      }
    } 

关于java - 在 Canvas Android中触摸事件后在随机位置绘制矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26447608/

相关文章:

Android:可滚动(水平和垂直)的带有按钮覆盖的 ImageView

java - 如何在没有实体类的情况下使用 Hibernate Criteria API?

java - viewpager 中的 fragment 转换问题

android - 我需要一个可点击的 UI 元素而不是 Toast(我可以创建具有可点击功能的自定义 toast 吗?)

android - SwitchPreferenceCompat 的自定义样式属性(支持 v7)

javascript - 我应该把这个条件放在哪里?

javascript - 无法使用 Canvas 将图像转换为其他格式

c# - 如何检测UI按钮是否已释放?统一-C#

java - 为程序员而不是用户突出显示

java - 字节数组在 JAXB 类中不起作用