0

단일 터치 입력을 사용하여 내 주요 활동에있는 사용자 정의보기를 이동하려고하는데, 동작 막대로 인해 이벤트의 x/y 좌표가 상쇄됩니다. 이동 중에 Android 사용자 정의보기가 오프셋됩니다.

GIF of problem

내가 좌표하지만 아무것도 작동하는 것 같군없는 Y로 작업 표시 줄의 크기를 부정 할 수있는 방법을 찾기 위해 노력하고있어. 상위 뷰와 사용자 정의 뷰의 차이를 y 좌표 getRootView().getHeight() - getHeight()에서 뺀 값이 올바르지 않습니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

사용자 정의보기 :

public class SampleView extends View { 

    private Paint paint; 
    private Path path = new Path(); 

    public SampleView(Context context) { 
     super(context); 
     init(); 
    } 

    public SampleView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    private void init() { 
     paint = new Paint(); 
     paint.setColor(Color.RED); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeWidth(10); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     canvas.drawPath(path, paint); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     final int x = (int) event.getRawX(); 
     final int y = (int) event.getRawY(); 

     switch(event.getActionMasked()) { 
      case MotionEvent.ACTION_DOWN: { 
       path.moveTo(x, y); 
       break; 
      } 
      case MotionEvent.ACTION_MOVE: { 
       path.lineTo(x, y); 
       break; 
      } 
     } 

     invalidate(); 
     return true; 
    } 

} 

내 MainActivity 감동하지 않은,하지만 내 사용자 지정보기 activity_main의 XML에 추가 한 :

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.caseyweed.sample.MainActivity"> 

    <com.caseyweed.sample.SampleView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</RelativeLayout> 

답변

2

사용 getX()getY() 대신 getRawX()getRawY() 장치 화면 좌표 대신보기에 상대적인 좌표를 원할 경우

+0

지금은 너무 바보 같아요. 정말 고맙습니다. – Battleroid