зум

Мой макет содержит кнопки, текстовые изображения и т. Д. Можно ли реализовать масштабирование в моем макете?

Ознакомьтесь со следующими ссылками, которые могут вам помочь.

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

  1. реализации самой пинч-зум-gestur

  2. Android-пинч

  3. GestureDetector.SimpleOnGestureListener

Для android 2.2+ (api level8) вы можете использовать ScaleGestureDetector.

вам нужен член:

private ScaleGestureDetector mScaleDetector; 

в вашем конструкторе (или onCreate ()) вы добавляете:

 mScaleDetector = new ScaleGestureDetector(context, new OnScaleGestureListener() { @Override public void onScaleEnd(ScaleGestureDetector detector) { } @Override public boolean onScaleBegin(ScaleGestureDetector detector) { return true; } @Override public boolean onScale(ScaleGestureDetector detector) { Log.d(LOG_KEY, "zoom ongoing, scale: " + detector.getScaleFactor()); return false; } }); 

Вы переопределяете onTouchEvent:

 @Override public boolean onTouchEvent(MotionEvent event) { mScaleDetector.onTouchEvent(event); return true; } 

Если вы нарисуете View вручную, в onScale () вы, вероятно, сохраните коэффициент масштабирования в члене, затем вызовите invalidate () и используйте коэффициент масштабирования при рисовании на вашем onDraw (). В противном случае вы можете напрямую изменять размеры шрифта или подобные вещи в onScale ().

Я применил масштабирование для моего TextView , используя этот учебник. Получившийся код:

 private GestureDetector gestureDetector; private View.OnTouchListener gestureListener; 

и в onCreate ():

  // Zoom handlers gestureDetector = new GestureDetector(new MyGestureDetector()); gestureListener = new View.OnTouchListener() { // We can be in one of these 2 states static final int NONE = 0; static final int ZOOM = 1; int mode = NONE; static final int MIN_FONT_SIZE = 10; static final int MAX_FONT_SIZE = 50; float oldDist = 1f; @Override public boolean onTouch(View v, MotionEvent event) { TextView textView = (TextView) findViewById(R.id.text); switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); Log.d(TAG, "oldDist=" + oldDist); if (oldDist > 10f) { mode = ZOOM; Log.d(TAG, "mode=ZOOM" ); } break; case MotionEvent.ACTION_POINTER_UP: mode = NONE; break; case MotionEvent.ACTION_MOVE: if (mode == ZOOM) { float newDist = spacing(event); // If you want to tweak font scaling, this is the place to go. if (newDist > 10f) { float scale = newDist / oldDist; if (scale > 1) { scale = 1.1f; } else if (scale < 1) { scale = 0.95f; } float currentSize = textView.getTextSize() * scale; if ((currentSize < MAX_FONT_SIZE && currentSize > MIN_FONT_SIZE) ||(currentSize >= MAX_FONT_SIZE && scale < 1) || (currentSize <= MIN_FONT_SIZE && scale > 1)) { textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, currentSize); } } } break; } return false; } 

Магические константы 1.1 и 0.95 были выбраны эмпирически (используя scale переменную для этой цели, мой TextView ведет себя как-то странно).

Существует также этот проект, который выполняет эту работу и отлично работает для меня: https://github.com/chrisbanes/PhotoView

В сотах, уровень API 11, возможно, мы можем использовать setScalaX и setScaleY с точкой поворота
Я объяснил это здесь
Масштабирование представления полностью
Пинч Zoom для просмотра полностью

Я создал проект для базового масштабирования, который поддерживает Android 2.1+

Доступно здесь

У меня есть библиотека с открытым исходным кодом, которая делает это очень хорошо. Это четыре библиотеки жестов, которые поставляются с настройкой масштабирования панорамирования. Вы можете найти его здесь: https://bitbucket.org/warwick/hacergestov3 Или вы можете скачать демо-приложение здесь: https://play.google.com/store/apps/details?id=com.WarwickWestonWright.HacerGestoV3Demo Это является чистой библиотекой canvasа, поэтому ее можно использовать в любом сценарии. Надеюсь это поможет.

  • Сделать ссылку в браузере Android запустите мое приложение?
  • Как настроить размер шрифта для текста, чтобы он соответствовал текстовому виду
  • не может получать значения из метода ondatachange
  • Как исключить определенные сообщения по имени TAG с помощью Android adb logcat?
  • выбор контакта из автозаполнения textview
  • Как программно отключить WiFi на Android-устройстве?
  • Способ получения всех EditTexts в представлении
  • Google Firebase выйдет и забудет пользователя в Android-приложении
  • Как использовать Bluetooth в эмуляторе Android?
  • Android Fatal signal 11 (SIGSEGV) на 0x636f7d89 (код = 1). Как его можно отследить?
  • Не удалось создать приложение com.android.tools.fd.runtime.BootstrapApplication?
  • Давайте будем гением компьютера.