Я добавляю пользовательские виды в FrameLayout программно:
public class CustomView extends View {
....
@Override
protected void onDraw(Canvas canvas) {
... //Doing stuff here
}
}
-
containerLayout = (FrameLayout) findViewById(R.id.container_layout);
CustomView cv1 = new CustomView(ctx);
CustomView cv2 = new CustomView(ctx);
cv1.setOnClickListener(new OnClickListener({
Toast.makeText(ThisActivity.this, "FooBar", Toast.LENGTH_LONG).show();
});
cv2.setOnClickListener(new OnClickListener({
Toast.makeText(ThisActivity.this, "BlaBlub", Toast.LENGTH_LONG).show();
});
container_layout.addView(cv1);
container_layout.addView(cv2);
Теперь, когда я нажимаю на свой пользовательский вид, событие запускается для обоих пользовательских видов, а не только для того, который я нажал. Я вижу оба тоста один за другим. Есть идеи почему?
ОБНОВЛЕНИЕ 1 - Подробнее
Я работаю над приложением AR и пытаюсь интегрировать виды на основе данных о местоположении (GPS), которые работают просто отлично. Единственное, что не работает, это слушатель моего собственного представления. Я вижу свои два пользовательских вида внутри CameraView / SurfaceView, и они не находятся в одинаковом положении
<FrameLayout
android:id="@+id/container_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.cameraview.CameraView
android:id="@+id/camera_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
android:adjustViewBounds="true"
app:autoFocus="true"
app:aspectRatio="4:3"
app:facing="back"
app:flash="off"/>
<SurfaceView
style="@style/ThemeOverlay.AppCompat.Light"
android:clickable="false"
android:id="@+id/surface_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
Я даже пытался пройти лишнюю милю вот так
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
if(listener != null) listener.onClick(this);
}
return super.dispatchTouchEvent(event);
}