2014-02-19 203 views
-1

我想讓它按住屏幕移動我的矩形。監聽器將輸出提供給控制檯,但不會使屏幕無效。無效()不刷新屏幕

public class DrawView extends View{ 
    Paint paint = new Paint(); 
    static int x = 20; 
    static int y = 20; 

public DrawView(Context context){ 
    super(context); 
    paint.setColor(Color.GREEN); 
} 

@Override 
public void onDraw(Canvas canvas){ 
    canvas.drawRect(x,y,100,100,paint); 
} 

public void OTListener(){ 
    setOnTouchListener(new OnTouchListener(){ 
     public boolean onTouch(View DrawView, MotionEvent e){ 
      x = 100; 
      y = 100; 
      invalidate(); 

      return false; 
     } 


    }); 
} 

} 
+0

沒有給出什麼輸出?你怎麼援引這個? –

+0

我沒有看到你調用'OTListener()'調用'setOnTouchListener()'的位置。你是否在其他地方叫它,或者你忘了叫它? – jgriffin

回答

1

試試這個。如果它是視圖層次結構中的頂視圖,它應該可以工作。 你必須看看event.getAction()如果你想在的onTouchEvent()做更高級的東西...

public class DrawView extends View { 

    Paint paintRect = new Paint(); 
    Paint paintClear = new Paint(); 
    private Point touch = new Point(); 

    public DrawView(Context context){ 
     super(context); 
     paintClear.setColor(Color.BLACK); 
     paintRect.setColor(Color.GREEN); 
    } 

    @Override 
    public void onDraw(Canvas canvas){ 
     canvas.drawPaint(paintClear); 
     canvas.drawRect(touch.x-50,touch.y-50,touch.x+50,touch.y+50,paintRect); 
    } 

    private void touch(int x, int y) { 
     touch.set(x,y);   
     invalidate(); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) {  
     touch((int)event.getX(), (int)event.getY()); 
     return true; 
    } 

} 
-2

在另一個方法中使用invalidate()不起作用。如果要從其他方法刷新活動,則需要使用postinvalidate()。

+2

這是錯誤的。請不要傳播虛假信息。 – ElDuderino

+2

@ElDuderino如果你願意的話,它會更有幫助,你知道,解釋*爲什麼*這是錯誤的,你應該怎麼做。 – Seth

+0

@ElDuderino這是我如何修復它。提交一個更好的答案,我會選擇它正確的。 – Molehole