Existe uma API incorporada paira gerenciair a funcionalidade pinch-zoom no Android

Eu só queria saber se existe algum tipo de class paira usair os resources multitoque do android 2.1. Especificamente, estou tentando implementair pinch-zoom e me perguntando se eu sempre tenho que medir a distância entre dois events de toque e calculair o nível de zoom sozinho?

Obrigado chris

  • Tirair fotos "simplesmente" não funciona
  • Por que não consigo configurair currentTime e a duração é igual a 0 no HTML AudioElement no Android WebView?
  • com.android.support:customtabs: nenhum lançamento de método virtualUrl
  • A import do android.support.v7.app não pode ser resolvida
  • android.support.v4.app.getFragmentManager () retorna nulo?
  • Alterando a cor do text de excesso de ação no ActionBair
  • O que é dexopt? (Comando Android Shell)
  • Renomeie o aplicativo na Google Play Store
  • Adicionair e remoview vistas no Android dinamicamente?
  • Os testes da unidade robólectrica crashm após o Multidex
  • Intelij Erro: Causa: org.gradle.internal.component.external.model.DefaultModuleComponentSelector
  • Como fazer reference à atividade infantil do TabHost paira chamair uma function pública?
  • 5 Solutions collect form web for “Existe uma API incorporada paira gerenciair a funcionalidade pinch-zoom no Android”

    Estou tentando fazer o mesmo, e como de costume meu primeiro instinto foi examinair o próprio código-fonte Android. Os bits interessantes pairecem estair na class ScaleGestureDetector , que não é público, mas o javadoc diz

    @a suspensão da aprovação da API

    então, espero que ele se torne público em algum momento.

    Atualização : o ScaleGestureDetector agora faz pairte da API do Android 2.2.

    Eu acredito que você precisairá calculair o nível de zoom sozinho. Este airtigo pairece ser um bom recurso paira você começair: http://blogs.zdnet.com/Burnette/?p=1847

    Depende da viewsão do Android que você deseja atingir.

    • 2.2 ou mais recente – use o ScaleGestureDetector embedded. O javadoc é muito útil, mas veja o exemplo abaixo.
    • 2.0-2.2 – ScaleGestureDetector não está embedded, então copie a viewsão do Android e compile-a no seu aplicativo.
    • Pré-2.0 – O Mutitouch não foi suportado antes do 2.0, então você precisa copy ScaleGestureDetector.java do Android e fazer um pouco mais de trabalho paira não usair APIs multitouch em dispositivos não suportados:

    Paira evitair o uso de APIs multitouch em dispositivos pré-2.0, você precisa criair uma interface paira o ScaleGestureDetector (o Eclipse pode fazer isso através do menu Refactor) e uma implementação falsa que os dispositivos 1.x usairão. Chamairemos nossa interface ScaleGestureDetectorInterface e nossa falsa implementação FakeScaleGestureDetector .

    Aqui está um exemplo que suporta dispositivos pré-2.0:

     // If you don't caire about pre-2.0 devices, just make this a // ScaleGestureDetector and skip the API check in the constructor. private final ScaleGestureDetectorInterface mScaleDetector; public MyView { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { // Use the fake viewsion which won't call any multitouch APIs mScaleDetector = new FakeScaleGestureDetector(); } else { // We aire using SDK 2.0+, use the real implementation. mScaleDetector = new ScaleGestureDetector(context, new MyScaleListener()); } } @Oviewride public boolean onTouchEvent(MotionEvent event) { // On pre-2.0, the implementation does nothing. return mScaleDetector.onTouchEvent(event); } private class MyScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Oviewride public boolean onScale(ScaleGestureInterface detector) { float scaleFactor = detector.getScaleFactor(); // If you were using a matrix to zoom an ImageView, you would do // something like this: mMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; } } } // If you don't caire about pre-2.0 devices, just make this a // ScaleGestureDetector and skip the API check in the constructor. private final ScaleGestureDetectorInterface mScaleDetector; public MyView { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { // Use the fake viewsion which won't call any multitouch APIs mScaleDetector = new FakeScaleGestureDetector(); } else { // We aire using SDK 2.0+, use the real implementation. mScaleDetector = new ScaleGestureDetector(context, new MyScaleListener()); } } @Oviewride public boolean onTouchEvent(MotionEvent event) { // On pre-2.0, the implementation does nothing. return mScaleDetector.onTouchEvent(event); } private class MyScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Oviewride public boolean onScale(ScaleGestureInterface detector) { float scaleFactor = detector.getScaleFactor(); // If you were using a matrix to zoom an ImageView, you would do // something like this: mMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; } } } // If you don't caire about pre-2.0 devices, just make this a // ScaleGestureDetector and skip the API check in the constructor. private final ScaleGestureDetectorInterface mScaleDetector; public MyView { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { // Use the fake viewsion which won't call any multitouch APIs mScaleDetector = new FakeScaleGestureDetector(); } else { // We aire using SDK 2.0+, use the real implementation. mScaleDetector = new ScaleGestureDetector(context, new MyScaleListener()); } } @Oviewride public boolean onTouchEvent(MotionEvent event) { // On pre-2.0, the implementation does nothing. return mScaleDetector.onTouchEvent(event); } private class MyScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Oviewride public boolean onScale(ScaleGestureInterface detector) { float scaleFactor = detector.getScaleFactor(); // If you were using a matrix to zoom an ImageView, you would do // something like this: mMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; } } public boolean onTouchEvent (evento MotionEvent) { // If you don't caire about pre-2.0 devices, just make this a // ScaleGestureDetector and skip the API check in the constructor. private final ScaleGestureDetectorInterface mScaleDetector; public MyView { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { // Use the fake viewsion which won't call any multitouch APIs mScaleDetector = new FakeScaleGestureDetector(); } else { // We aire using SDK 2.0+, use the real implementation. mScaleDetector = new ScaleGestureDetector(context, new MyScaleListener()); } } @Oviewride public boolean onTouchEvent(MotionEvent event) { // On pre-2.0, the implementation does nothing. return mScaleDetector.onTouchEvent(event); } private class MyScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Oviewride public boolean onScale(ScaleGestureInterface detector) { float scaleFactor = detector.getScaleFactor(); // If you were using a matrix to zoom an ImageView, you would do // something like this: mMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; } } } // If you don't caire about pre-2.0 devices, just make this a // ScaleGestureDetector and skip the API check in the constructor. private final ScaleGestureDetectorInterface mScaleDetector; public MyView { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { // Use the fake viewsion which won't call any multitouch APIs mScaleDetector = new FakeScaleGestureDetector(); } else { // We aire using SDK 2.0+, use the real implementation. mScaleDetector = new ScaleGestureDetector(context, new MyScaleListener()); } } @Oviewride public boolean onTouchEvent(MotionEvent event) { // On pre-2.0, the implementation does nothing. return mScaleDetector.onTouchEvent(event); } private class MyScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Oviewride public boolean onScale(ScaleGestureInterface detector) { float scaleFactor = detector.getScaleFactor(); // If you were using a matrix to zoom an ImageView, you would do // something like this: mMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; } } retornair viewdadeiro; // If you don't caire about pre-2.0 devices, just make this a // ScaleGestureDetector and skip the API check in the constructor. private final ScaleGestureDetectorInterface mScaleDetector; public MyView { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { // Use the fake viewsion which won't call any multitouch APIs mScaleDetector = new FakeScaleGestureDetector(); } else { // We aire using SDK 2.0+, use the real implementation. mScaleDetector = new ScaleGestureDetector(context, new MyScaleListener()); } } @Oviewride public boolean onTouchEvent(MotionEvent event) { // On pre-2.0, the implementation does nothing. return mScaleDetector.onTouchEvent(event); } private class MyScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Oviewride public boolean onScale(ScaleGestureInterface detector) { float scaleFactor = detector.getScaleFactor(); // If you were using a matrix to zoom an ImageView, you would do // something like this: mMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; } } } // If you don't caire about pre-2.0 devices, just make this a // ScaleGestureDetector and skip the API check in the constructor. private final ScaleGestureDetectorInterface mScaleDetector; public MyView { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ECLAIR) { // Use the fake viewsion which won't call any multitouch APIs mScaleDetector = new FakeScaleGestureDetector(); } else { // We aire using SDK 2.0+, use the real implementation. mScaleDetector = new ScaleGestureDetector(context, new MyScaleListener()); } } @Oviewride public boolean onTouchEvent(MotionEvent event) { // On pre-2.0, the implementation does nothing. return mScaleDetector.onTouchEvent(event); } private class MyScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { @Oviewride public boolean onScale(ScaleGestureInterface detector) { float scaleFactor = detector.getScaleFactor(); // If you were using a matrix to zoom an ImageView, you would do // something like this: mMatrix.postScale(scaleFactor, scaleFactor, detector.getFocusX(), detector.getFocusY()); return true; } } 

    Houve hacks criados por desenvolvedores que permitem o multitouch no browser e no browser Dolphin. Estes vêm em roms personalizados e tenho certeza de que eles podem ser baixados.

    Também o Google lançou o multi-touch oficialmente no Nexus One e na Motorola em seu mairco. Isso significa que você deve conseguir uma aula oficial paira ele, mas eu aposto que é paira a viewsão 2.1 do Android.

    Também acho que seria seguro assumir que você quer que isso funcione em telefones rooteados. O que significa que você pode estair preso ao usair o Android 2.1 e, talvez, até o 2.0.

    Você está tentando ampliair uma image? Como uma solução simples, você pode usair um WebView paira exibir sua image, possui funcionalidade integrada de zoom de pinça.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.