Мое приложение (Java 8 / мин API 24 / целевой API 27) отображает изображение (загруженное из хранилища приложения во время выполнения) с использованием ImageView
, которое я хочу увеличить, а также панорамировать во время увеличения.
Я знаю, что уже есть вопросы по этому поводу, но большинство из них были заданы в 2012 или 2013 годах, и принятые ответы обычно гласят: «Использовать библиотеку» (например, PhotoView ), что я вероятно, не может, потому что: я также хочу нарисовать на изображении, например, заполненный круг с текстом рядом с ним, который затем перемещается вместе с изображением, но не увеличивается. Думайте об этом как о карте (отдельное изображение, около 2000x2000) с маркерами карты, которые всегда остаются в одном и том же месте на карте (= одинаковые координаты x / y), даже при панорамировании.
Я уже нашел этот вопрос 2012 года, но предлагаемая библиотека ( TileView ), к сожалению, требует, чтобы изображение было разделено на плитки, которые хранятся как активы.
Вот почему я начал применять масштабирование сам, используя ScaleGestureDetector.SimpleOnScaleGestureListener
( источник ):
ScaleGestureDetector sgd = new ScaleGestureDetector(this, new MyPinchListener());
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
sgd.onTouchEvent(event);
return true;
}
});
Это автоматически вызывает слушателя, например, onScaleEnd
, и затем я рисую соответствующую часть растрового изображения на Canvas
и добавьте это к ImageView
:
Bitmap bitmapCanvas = Bitmap.createBitmap(getResources().getDisplayMetrics().widthPixels,getResources().getDisplayMetrics().heightPixels,Bitmap.Config.ARGB_8888);
canvas.drawBitmap(bitmapFile,srcRect,dstRect,paint);
imageView.setImageBitmap(bitmapCanvas);
Там полный код для обнаружения масштабирования и панорамирования здесь , но, хотя он работает, он не использует SimpleOnScaleGestureListener
или SimpleOnGestureListener
(который имеет onScroll
), но вместо этого пытается найти тип самого жеста.
Вопрос: Как мне объединить этих двух слушателей в onTouch
, чтобы я мог взять преимущество их on...
методов? Есть ли менее сложный способ, чем полный код, который я привел выше?
Если есть библиотека (бесплатная и все еще поддерживается!), Которая выполняет прокрутку / панорамирование с одним большим изображением, а также позволяет добавлять какой-либо тип наложения (мне нужно знать, какая область пикселей отображается в настоящее время), пожалуйста, не стесняйтесь предлагать его в качестве альтернативы.