Как я могу увеличивать и уменьшать изображение без матрицы? - PullRequest
0 голосов
/ 12 апреля 2020
import android.view.ScaleGestureDetector;

public class MainActivity extends AppCompatActivity {
    ImageView im1;
    private ScaleGestureDetector mScaleGestureDetector;
    private float mScaleFactor = 1.0f;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        im1=(ImageView)findViewById(R.id.im1);
        mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());
    }
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return mScaleGestureDetector.onTouchEvent(event);
    }

    private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
        // when a scale gesture is detected, use it to resize the image
        @Override
        public boolean onScale(ScaleGestureDetector scaleGestureDetector){
            mScaleFactor *= scaleGestureDetector.getScaleFactor();
                im1.setScaleX(mScaleFactor);
                im1.setScaleY(mScaleFactor);
                return true;
        }
    }
}

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

 private float spacing(MotionEvent event)
    {
        float x = event.getX(0) - event.getX(1);
        float y = event.getY(0) - event.getY(1);
        return (float) Math.sqrt(x * x + y * y);
    }

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

private void midPoint(PointF point, MotionEvent event)
{
    float x = event.getX(0) + event.getX(1);
    float y = event.getY(0) + event.getY(1);
    point.set(x / 2, y / 2);
}

Но я не знаю, как объединить это, чтобы закодировать то, что мне нужно. Пожалуйста, помогите. Thankyou

...