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,但在XML已經添加了activity_main我的自定義視圖:

<?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