2014-02-19 2 views
-1

화면을 눌러 내 직사각형을 움직 이도록 만들고 싶습니다. 리스너는 콘솔에 출력하지만 화면을 무효화하지는 않습니다.Invalidate() 화면 새로 고침 없음

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

그것은 무엇 출력을 제공 않습니다 ... event.getAction()를 확인해야합니다? 이걸 어떻게 부르니? –

+0

'setOnTouchListener()'를 호출하기 위해'OTListener()'를 호출하는 곳이 어디인지 알지 못합니다. 당신이 다른 곳으로 전화하고 있습니까? 아니면 전화를 잊어 버렸습니까? – jgriffin

답변

1

시도해보십시오. 뷰 계층에서 최상위 뷰인 경우 작동해야합니다. 당신이 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