셰이프를 그리는 데 사용하는 사용자 지정 SurfaceView를 만들었으며 사용자는 셰이프와 상호 작용하도록 뷰를 확대/축소하고 팬 할 수 있습니다. 이 모든 것이 효과적이지만 문제는 이제 도형이 항상 상단에 그려지고 내 화면에는뿐 아니라 버튼 및 textviews와 같은 다른 뷰 위에 그려지는 것입니다. XML 레이아웃에서 여러 가지 방식으로 사용자 정의보기와 단추를 정렬하려고 시도했지만 FrameLayouts 및 RelativeLayouts (as suggested here)에 대한보기를 부모로 사용하려고했습니다.다른 뷰 위에 그리기 사용자 지정 SurfaceView 방지
버튼과 다른 레이아웃 요소를 내 사용자 정의보기 위에 띄우고 싶습니다. 아래 이미지에서 볼 수 있듯이, 내 뷰를 패닝하면 직사각형이 단추를 가린다.
내 맞춤형 SurfaceView가 모든 것을 그릴 수 없게하려면 어떻게해야합니까?
public class CustomShapeView extends SurfaceView implements Runnable, SurfaceHolder.Callback {
/* Other implementation stuff */
@Override
public void run() {
while (isDrawing) {
if (!holder.getSurface().isValid())
continue; //wait till it becomes valid
Canvas canvas = null;
try {
canvas = holder.lockCanvas(null);
synchronized (holder) {
try {
lock.lock();
canvas.concat(sampleMatrix);
canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
drawShapes(canvas);
} finally {
lock.unlock();
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (canvas != null) {
holder.unlockCanvasAndPost(canvas);
}
}
}
}
}
내 테스트 XML 레이아웃, 나는 뒤에있는 버튼 (왼쪽)을 만들 기대 :
내 그리기 코드는 서피스 뷰 SurfaceView 클래스에서 별도의 스레드에서 실행 사용자 정의보기 및 버튼 사용자 정의보기 위에 떠있다 (오른쪽)입니다 : 나는 유사한 문제에 직면하고있어
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Left"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"/>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.CustomShapeView
android:id="@+id/floor_plan_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Right"
android:id="@+id/button2"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
</RelativeLayout>