2012-05-14 3 views
0

Мне нужно установить метод onTouch на исправление, которое я создал, но я не знаю, как это сделать в методе OnDraw. это, но я не знаю, как здесь мой код, спасибо за помощь!Метод OnTouch в 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; 
    } 
} 

ответ

1

У вас должно быть много проблем с

Rect Rect = new Rect(); 

имя его

Rect rect2 = new Rect(); 

или что-то подобное, а не Rect Rect

Небольшой Performence Типп

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())) { 
+0

, когда я делаю эту строку кода 'if rect2.contains (event.getX() event.getY())) {' i get error on "содержит" say "if (rect2.contains (event.getX() event .getY())) {«В чем была моя ошибка? –

+0

, вы должны отнести их к int if (rect2.contains ((int) event.getX(), (int) event.getY())) { – Phil

0

в 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. 
+0

Im не уверены, как 'вернуть super.onTouch (View v, Событие MotionEvent); 'supost работать, потому что я просто получаю кучу ошибок, когда я помещаю это в и с if-статусом, и я помещаю что-то там, ничего не происходит. –

+0

Есть ли способ сделать работу super.onTouch? – superuser

2

в вашем onTouch просто поставить:

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

я думаю, что это то, что ваш запрашиваемая дайте мне знать, если его не

+0

Я думаю, что это то, что я хочу/нуждаюсь, но его не работает, я не получаю никаких ошибок или чего-то другого, но когда я запускаю его, ничего не происходит .. вот что у меня есть: x1 = 0; \t \t x2 = 300; \t \t \t \t \t \t y1 = 0; \t \t y2 = 300; @Override \t общественного логический onTouch (View v, MotionEvent событие) \t { \t \t если (rect2.contains ((INT) event.getX(), (целое) event.getY())) \t \t { \t \t \t Журнал.d («TouchView», «On Touched»); \t \t \t x2 = 100; \t \t \t y2 = 100; \t \t} \t \t return true; \t} ' –

+0

О да, и в onDraw у меня есть' rect2.set (x1, y1, x2, y2); \t \t \t \t Краска синяя = новая Краска(); \t \t blue.setColor (Color.BLUE); \t \t canvas.drawRect (rect2, синий); \t \t invalidate(); ' –

+0

hmm в вашем конструкторе для класса у вас есть \t \t setFocusable (true); \t \t setFocusableInTouchMode (true) \t; \t \t комплектOnTouchListener (это); я не думаю, что все из них требуются, я думаю, что только последние два, но все они должны быть в безопасности. \t \t requestFocus(); – MikeT