Я создал свое собственное представление, и я хочу применить масштабирование для моего пользовательского представления. Как это сделать?
Пинч-зум для пользовательского вида
Ответ 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
Эта библиотека позволяет применять масштабирование и панорамирование для пользовательских видов. Это сработало для моих нужд:
Ответ 4
используйте это:
Реализация ImageView для Android, поддерживающая масштабирование, различными сенсорными жестами.