versiones pie oreo developer descargar android

pie - pizca de zoom de android



android pie (7)

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

Disponible here

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



Implementé un zoom pellizco para mi TextView , usando implementing-the-pinch-zoom-gestur 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 (el uso de scale variable de scale para este propósito hizo que mi comportamiento con TextView extraño).



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

necesitas un miembro:

private ScaleGestureDetector mScaleDetector;

en tu constructor (o onCreate ()) agregas:

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

Usted anula en TouchEvent:

@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 invoque invalidate () y use el factor de escala cuando dibuje en su onDraw (). De lo contrario, puede modificar directamente el tamaño de las fuentes o cosas así en onScale ().