Щепотка, чтобы увеличить слой внутри прокрутки - PullRequest
0 голосов
/ 14 января 2020

Я сталкиваюсь с проблемой, когда пытаюсь ущипнуть, чтобы увеличить макет, который содержит холст и изображение, и оба они находятся внутри прокрутки.

Я пытался найти что-то, что подходит, но ничего не работает, и я думаю, что это потому, что я использую scrollview.

Моя проблема: само представление scrollview не правильно. если пользователь уменьшает размер изображения, его можно прокручивать от экрана и не видеть, а если изображение увеличивается, то пользователь не может прокрутить до всех частей изображения.

это мой MainActivity.java:

public class MainActivity extends AppCompatActivity {

private float mScale = 1f;
private ScaleGestureDetector mScaleDetector;
GestureDetector gestureDetector;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    gestureDetector = new GestureDetector(this, new GestureListener());

    // animation for scalling
    mScaleDetector = new ScaleGestureDetector(this, new ScaleGestureDetector.SimpleOnScaleGestureListener()
    {
        @Override
        public boolean onScale(ScaleGestureDetector detector)
        {
            float scale = 1 - detector.getScaleFactor();

            float prevScale = mScale;
            mScale += scale;

            if (mScale < 0.1f) // Minimum scale condition:
                mScale = 0.1f;

            if (mScale > 10f) // Maximum scale condition:
                mScale = 10f;
            ScaleAnimation scaleAnimation = new ScaleAnimation(1f / prevScale, 1f / mScale, 1f / prevScale, 1f / mScale, detector.getFocusX(), detector.getFocusY());
            scaleAnimation.setDuration(0);
            scaleAnimation.setFillAfter(true);
            LinearLayout layout =(LinearLayout) findViewById(R.id.scrollLayout);
            layout.startAnimation(scaleAnimation);
            return true;
        }
    });
}

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

private class GestureListener extends GestureDetector.SimpleOnGestureListener {
    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }
    // event when double tap occurs
    @Override
    public boolean onDoubleTap(MotionEvent e) {
        // double tap fired.
        return true;
    }
}


}

и это мой макет. xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fillViewport="true"
            android:paddingTop="0dp"
            android:paddingBottom="0dp"
            android:id="@+id/scroll">

            <LinearLayout
                android:id="@+id/scrollLayout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical">

                <View
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"/>

                <FrameLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">

                    <ImageView
                        android:id="@+id/remoteImage"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:adjustViewBounds="true"
                        android:clickable="true"
                        android:src="@drawable/rc_01"
                        android:focusable="true"
                        android:padding="30dp"
                        android:layout_gravity="center"
                        android:scaleType="fitXY" />


                </FrameLayout>

                <View
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"/>

            </LinearLayout>

        </ScrollView>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>
...