zoom de pellizco de Android

4 minutos de lectura

zoom de pellizco de Android
código de bytes

Mi diseño contiene botones, vistas de texto, etc. ¿Es posible implementar zoom de pellizco en mi diseño?

1646169488 294 zoom de pellizco de Android
Vinayak Bevinakatti

Respuesta actualizada

El código se puede encontrar aquí: doc-oficial

Respuesta desactualizada

Consulta los siguientes enlaces que te pueden ayudar

Los mejores ejemplos se proporcionan en los enlaces a continuación, que puede refactorizar para cumplir con sus requisitos.

  1. implementando el gesto de pellizcar-zoom

  2. pellizco de Android

  3. GestureDetector.SimpleOnGestureListener

  • Esta respuesta será inútil, una vez que los enlaces se caigan. Al menos cite las partes relevantes.

    – Lukas Knuth

    10 de diciembre de 2015 a las 8:29

  • FYI, esta respuesta está desactualizada. EscalaGestoDetector es la respuesta de Android para pinch-zoom, desde API 8. Vea la respuesta de Emanuel.

    – El fabricante de herramientas Steve

    20 oct 2016 a las 17:08


Para Android 2.2+ (api level8), puede usar ScaleGestureDetector.

necesitas un miembro:

private ScaleGestureDetector mScaleDetector;

en su constructor (o onCreate()) agrega:

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;
    }
});

Anula onTouchEvent:

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

Si dibuja su Vista a mano, en onScale() probablemente almacene el factor de escala en un miembro, luego llame a invalidate() y use el factor de escala cuando dibuje en su onDraw(). De lo contrario, puede modificar directamente los tamaños de fuente o cosas por el estilo en onScale().

  • Información adicional en Documentos de Android – Arrastrar y escalar Tenga en cuenta especialmente el código de ejemplo que muestra cómo combinar la panorámica (desplazamiento) con la escala (zoom de pellizco).

    – El fabricante de herramientas Steve

    20 oct 2016 a las 17:12


zoom de pellizco de Android
Jorge

Implementé un pellizco de zoom para mi TextViewutilizando esta tutorial. El código resultante es este:

private GestureDetector gestureDetector;
private View.OnTouchListener gestureListener;

y en 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;
        }

Las constantes mágicas 1.1 y 0.95 se eligieron empíricamente (usando scale variable para este propósito hizo mi TextView comportarse un poco raro).

  • ¿Puedo saber tu MyGestureDetector() clase

    – Praveenkumar

    28 de enero de 2012 a las 11:12

  • @Renanlf Eso fue hace más de un año. Lo siento, ya ni siquiera codifico para Android. Tampoco tengo esas fuentes en ningún lado.

    – Jorge

    28 de agosto de 2012 a las 14:09


  • MyGestureDetector() no es relevante aquí; debido a la declaración GestureDetector(GestureDetector.OnGestureListener listener) concluimos que es un nombre inapropiado hijo de GestureDetector.OnGestureListener. Y los eventos detectados por esa clase son irrelevantes para el zoom de pellizco.

    – 18446744073709551615

    12 de diciembre de 2012 a las 13:25


  • switch (event.getAction() & MotionEvent.ACTION_MASK), en esta línea del código: ACTION_MASK cumple 255 (ff) entonces, ¿cuál es el punto de agregar Motion.ACTION_MASK? ¿Será suficiente cambiar (event.getAction()), si no, por qué? ¿Podría explicarlo?

    – respuesta88

    24 de marzo de 2014 a las 6:34


  • @folone ¿Podría ayudarme en esta pregunta? Esta pregunta es similar a lo que estoy enfrentando.

    – usuario3265443

    20/04/2014 a las 21:40

También existe este proyecto que hace el trabajo y funcionó perfectamente para mí:
https://github.com/chrisbanes/PhotoView

En nido de abeja, API nivel 11, es posible, podemos usar setScalaX y setScaleY con punto de pivote
aqui lo he explicado
Ampliar una vista por completo
Pellizcar Zoom para ver completamente

1646169490 420 zoom de pellizco de Android
Jason Polites

Creé un proyecto para zoom de pellizco básico compatible con Android 2.1+

Disponible aquí

1646169490 67 zoom de pellizco de Android
usuario2288580

Tengo una biblioteca de código abierto que hace esto muy bien. Es una biblioteca de cuatro gestos que viene con una configuración de zoom panorámica lista para usar. Lo puedes encontrar aquí: https://bitbucket.org/warwick/hacergestov3
O puede descargar la aplicación de demostración aquí: https://play.google.com/store/apps/details?id=com.WarwickWestonWright.HacerGestoV3Demo
Esta es una biblioteca de lienzo puro, por lo que se puede usar en prácticamente cualquier escenario. Espero que esto ayude.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad