Android OnDraw中的OnTouch方法

Android OnDraw中的OnTouch方法,android,touch-event,ondraw,Android,Touch Event,Ondraw,我需要将onTouch方法设置为已设置的rect,但我不知道如何在OnDraw方法中执行此操作。但是我不知道我的代码是怎么写的,谢谢你的帮助 public class Tab3 extends View implements OnTouchListener { int x1, x2, y1, y2; Rect Rect = new Rect(); public Tab3(Context context, AttributeSet attrs) {

我需要将onTouch方法设置为已设置的rect,但我不知道如何在OnDraw方法中执行此操作。但是我不知道我的代码是怎么写的,谢谢你的帮助

public class Tab3 extends View implements OnTouchListener
{
    int x1, x2, y1, y2;
    Rect Rect = new Rect();
    public Tab3(Context context, AttributeSet attrs)
    {
        super (context, attrs);
        x1 = 0;
        x2 = 100;
        y1 = 0;
        y2 = 100;

    }

    @Override
    protected void onDraw(Canvas canvas) 
    {
        // TODO Auto-generated method stub
        super.onDraw(canvas);


        Rect.set(x1, y1, x2, y2);

        Paint blue = new Paint();
        blue.setColor(Color.BLUE);
        canvas.drawRect(Rect, blue);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) 
    {

        return false;
    }
}

阅读MotionEvent类。

阅读MotionEvent类。

onTouch
中,您可以执行以下操作:

if(Rect.contains((int) event.getX(), (int) event.getY())) {
//do something
}
return super.onTouch(View v, MotionEvent event);  //call super's method so that system would send event to you only once when you touched it.

onTouch
中,您可以执行以下操作:

if(Rect.contains((int) event.getX(), (int) event.getY())) {
//do something
}
return super.onTouch(View v, MotionEvent event);  //call super's method so that system would send event to you only once when you touched it.

在您的onTouch中,只需放置:

if(Rect.contains((int) event.getX(),(int) event.getY())){

我想这就是你的要求,如果不是你的建议,请告诉我

if(Rect.contains((int) event.getX(),(int) event.getY())){

我想这就是你的要求。如果不是第一次,请告诉我。你可能会遇到很多问题

Rect Rect = new Rect();
说出它的名字

Rect rect2 = new Rect();
或者类似的东西,而不是Rect

小演出

Rect.set(x1, y1, x2, y2);
把这个放在盒子里

public Tab3(Context context, AttributeSet attrs)
    {
}
因为

  protected void onDraw(Canvas canvas) 
    {
每次使用重新绘制时都会调用

invalidate();
你检查她是否按了右键

if (rect2.contains(event.getX(),event.getY())) {

首先,你可能会有很多问题

Rect Rect = new Rect();
说出它的名字

Rect rect2 = new Rect();
或者类似的东西,而不是Rect

小演出

Rect.set(x1, y1, x2, y2);
把这个放在盒子里

public Tab3(Context context, AttributeSet attrs)
    {
}
因为

  protected void onDraw(Canvas canvas) 
    {
每次使用重新绘制时都会调用

invalidate();
你检查她是否按了右键

if (rect2.contains(event.getX(),event.getY())) {

当我执行这行代码时,如果rect2.contains(event.getX()event.getY()){我在“contains”上得到一个错误,它说“如果(rect2.contains(event.getX()event.getY()){”我的错误是什么?如果(rect2.contains((int)event.getX(),(int)event.getY()){当我执行这行代码时,如果rect2.contains(event.getX())包含(event.getX())event.getY()){我在“contains”上得到一个错误,它说“if(rect2.contains(event.getX()event.getY()){”我的错误是什么?你必须将它们转换为int if(rect2.contains((int)event.getX(),(int)event.getY())){我想这是我想要/需要的,但它不起作用,我没有得到任何错误或任何东西,但当我运行它时,什么也没有发生。{这就是我所拥有的
x1=0;x2=300;y1=0;y2=300;@Override public boolean onTouch(View v,MotionEvent event){if(rect2.contains((int)event.getX(),(int)event.getY()){Log.d(“触摸视图”,“触摸时”);x2=100;y2=100;}返回true;}
Oh是的,在onDraw中我有
rect2.set(x1,y1,x2,y2);Paint blue=new Paint();blue.setColor(Color.blue);canvas.drawRect(rect2,blue);invalidate();
hmm在类的构造函数中有setFocusable(true)吗;setFocusableInTouchMode(true);setOnTouchListener(此);我不认为所有这些都是必需的我认为只有最后两个,但将所有这些都放在安全的requestFocus()上;我想这是我想要/需要的,但它不起作用,我没有得到任何错误或任何东西,但当我运行它时,什么也没有发生。。这就是我所拥有的
x1=0;x2=300;y1=0;y2=300;@Override public boolean onTouch(View v,MotionEvent event){if(rect2.contains((int)event.getX(),(int)event.getY()){Log.d(“TouchView,“触碰时”);x2=100;y2=100;}返回true;}
Oh是的,在onDraw中我有
rect2.set(x1,y1,x2,y2);Paint blue=new Paint();blue.setColor(Color.blue);canvas.drawRect(rect2,blue);invalidate();
hmm在类的构造函数中是否有setFocusable(true);setFocusableInTouchMode(true);setOnTouchListener(此);我不认为所有这些都是必需的,我认为只有最后两个,但将它们都放在安全的requestFocus()中;我不确定
如何返回super.onTouch(视图v,运动事件)
是最难工作的,因为当我把它放进if语句中时,我只得到了一堆错误,我把一些东西放进去,什么也没有发生。我不知道
如何返回super.onTouch(视图v,运动事件)
是最难工作的,因为当我把它放进if语句中时,我只会得到一堆错误,然后我把一些东西放进去,结果什么也没发生。