Pregunta

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

¿Fue útil?

Solución

** Respuesta anticuada **

Consulte los siguientes enlaces que pueden ayudarlo

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

  1. Implementación de la gestur de zoom

  2. Perra de android

  3. GestiDetector

Otros consejos

Para Android 2.2+ (API Level8), puede usar ScaleGestEndetector.

necesitas un miembro:

private ScaleGestureDetector mScaleDetector;

En su constructor (o onCreate ()) usted 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;
    }
});

Anulas a 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, entonces llame a Invalidate () y use el factor de escala al dibujar en su OnDraw (). De lo contrario, puede modificar directamente los tamaños de fuentes o cosas así en Onscale ().

Implementé un zoom de pellizco para mi TextView, usando este 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 fueron elegidas empíricamente (usando scale variable para este propósito hizo mi TextView comportarse un poco raro).

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

En Honeycomb, API Nivel 11, es posible, podemos usar SetScalax y SetScaley con Pivot Point
Lo he explicado aquí
Zoom de una vista por completo
Pinch zoom para ver completamente

He creado un proyecto para el zoom de pellizco básico que admite Android 2.1+

Disponible aquí

Tengo una biblioteca de código abierto que lo hace muy bien. Es una biblioteca de cuatro gestos que viene con una configuración de zoom de sartén lista de usar. Lo puedes encontrar aquí: https://bitbucket.org/warwick/hacergestov3O puede descargar la aplicación de demostración aquí: https://play.google.com/store/apps/details?id=com.warwickwestonwright.hacergestov3demoEsta es una biblioteca de lienzo puro, por lo que se puede usar en cualquier escenario bonito. Espero que esto ayude.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top