CameraFilter icon indicating copy to clipboard operation
CameraFilter copied to clipboard

Android 6 - on the first run does not display anything in the TextView

Open ArtemSel opened this issue 9 years ago • 4 comments

But if restart the app - all works fine. I think the problem still in runtime permissions

ArtemSel avatar Sep 30 '16 10:09 ArtemSel

It doesn't crash now?

nekocode avatar Sep 30 '16 11:09 nekocode

Are you saying the 'textureview'?

nekocode avatar Sep 30 '16 11:09 nekocode

I Found way hot to fix it: if set default visibility state to GONE for textureview (in .xml file) and change it when we call setupCameraPreviewView() (in MainActivity) to textureView.setVisibility(View.VISIBLE) - it solve this problem

in main.xml

<TextureView
        android:id="@+id/textureView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

change to

<TextureView
        android:id="@+id/textureView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="gone"/>

in MainActivity.java

void setupCameraPreviewView() {
        renderer = new CameraRenderer(this);
        textureView = (TextureView) findViewById(R.id.textureView);
        assert textureView != null;
        textureView.setSurfaceTextureListener(renderer);

        // Show original frame when touch the view
        textureView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        renderer.setSelectedFilter(R.id.filter0);
                        break;

                    case MotionEvent.ACTION_UP:
                    case MotionEvent.ACTION_CANCEL:
                        renderer.setSelectedFilter(filterId);
                        break;
                }
                return true;
            }
        });

        textureView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                renderer.onSurfaceTextureSizeChanged(null, v.getWidth(), v.getHeight());
            }
        });
    }

change to:

void setupCameraPreviewView() {
        renderer = new CameraRenderer(this);
        textureView = (TextureView) findViewById(R.id.textureView);
        assert textureView != null;
        textureView.setSurfaceTextureListener(renderer);

       textureView.setVisibility(View.VISIBLE); //Don't touch this code! It works on magic

        // Show original frame when touch the view
        textureView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                    case MotionEvent.ACTION_DOWN:
                        renderer.setSelectedFilter(R.id.filter0);
                        break;

                    case MotionEvent.ACTION_UP:
                    case MotionEvent.ACTION_CANCEL:
                        renderer.setSelectedFilter(filterId);
                        break;
                }
                return true;
            }
        });

        textureView.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
            @Override
            public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
                renderer.onSurfaceTextureSizeChanged(null, v.getWidth(), v.getHeight());
            }
        });
    }

ArtemSel avatar Oct 03 '16 13:10 ArtemSel

Good solution! Thanks!

Traz9g avatar Oct 04 '16 08:10 Traz9g