Подтвердить что ты не робот

Пинч-зум для пользовательского вида

Я создал свое собственное представление, и я хочу применить масштабирование для моего пользовательского представления. Как это сделать?

4b9b3361

Ответ 1

В этой статье в блоге разработчиков Android очень хорошо описывается этот вопрос (прокрутите вниз до раздела GestureDetectors):

Создание чувства мультитач

Если вы просто хотите реализовать масштабирование, вам нужно всего несколько строк кода:

private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;

public MyCustomView(Context mContext){
    //...
    //Your view code
    //...
    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
    // Let the ScaleGestureDetector inspect all events.
    mScaleDetector.onTouchEvent(ev);
    return true;
}

@Override
public void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    canvas.save();
    canvas.scale(mScaleFactor, mScaleFactor);
    //...
    //Your onDraw() code
    //...
    canvas.restore();
}

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        mScaleFactor *= detector.getScaleFactor();

        // Don't let the object get too small or too large.
        mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f));

        invalidate();
        return true;
    }
}

Остальная часть статьи посвящена обработке других жестов, но вместо использования их реализации вы можете использовать GestureDetector, так как ScaleGestureDetector используется в коде выше.

Ответ 2

Поместите свой вид внутрь ZoomView.

Пользовательское представление доступно здесь https://github.com/Polidea/android-zoom-view легко, бесплатно и так весело!

Ответ 3

Эта библиотека позволяет применять масштабирование и панорамирование для пользовательских видов. Это сработало для моих нужд:

https://github.com/natario1/ZoomLayout

Ответ 4

используйте это:

Реализация ImageView для Android, поддерживающая масштабирование, различными сенсорными жестами.

https://github.com/chrisbanes/PhotoView