简体   繁体   中英

Android pass onClick to child

Hello my goal is to make my custom view (ViewCircleOfInterest.java) receiving onClick. Now every time I click onClickListener on ViewCircleOfInterest.java is not called.

My interesting part of layout looks like that:

my_layout.xml

<FrameLayout
    android:id="@+id/camera_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/rl"
    android:layout_alignParentTop="true"
    android:background="#bbb">

    <abc.x.y.ViewCircleOfInterest
        android:id="@+id/view_circle_of_interest"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</FrameLayout>

I have FrameLayout on my layout and I added view (SurfaceView - CameraPreview.java) to it like that

MyActivity.java

        rootView = findViewById(android.R.id.content).getRootView();
        viewCircleOfInterest = rootView.findViewById(R.id.view_circle_of_interest);
        viewCircleOfInterest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(NewWayMeasurementActivity.this, "circle a", Toast.LENGTH_SHORT).show();
            }
        });

    (...)

    ((FrameLayout) rootView.findViewById(R.id.camera_view)).addView(cameraPreview);

     (...)

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    return super.dispatchTouchEvent(event);
}

On CameraPreview.java in my init() method I do like that:

    (...)
    viewCircleOfInterest = ((NewWayMeasurementActivity)activity).viewCircleOfInterest;
    viewCircleOfInterest.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getContext(), "circle aa", Toast.LENGTH_SHORT).show();
        }
    });

I also set onClickListener on my ViewCircleOfInterest.java

public ViewCircleOfInterest(SurfaceView surfaceView) {
    super(surfaceView.getContext());
    this.surfaceView = surfaceView;
    setOnClickListener(this);
}

@Override
public void onClick(View v) {
    Toast.makeText(surfaceView.getContext(), "circle aaa", Toast.LENGTH_SHORT).show();
}

But unfortunately non of this method works, I still cannot receive onclicks from my custom view. How to solve that? I hope my question and code is understandable.

Make these changes in your code and check if it works.

my_layout.xml

<FrameLayout
    android:id="@+id/camera_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@+id/rl"
    android:layout_alignParentTop="true"
    android:background="#bbb">

    <abc.x.y.ViewCircleOfInterest
        android:id="@+id/view_circle_of_interest"
        android:layout_width="wrap_content"
        android:clickable="true"
        android:layout_height="wrap_content"/>

</FrameLayout>

MyActivity.java

((FrameLayout)rootView.findViewById(R.id.camera_view)).addView(cameraPreview,0);

Here we are adding cameraPreview at 0 index so your custom view is on top now and that should receive clicks.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM