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?
En honeycomb, API nivel 11, es posible, podemos usar setScalaX y setScaleY con punto de pivote
Lo he explicado aquí
Zoom una vista completamente
Pellizque Zoom para ver completamente
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).
Mira los siguientes enlaces que pueden ayudarte
Los mejores ejemplos se proporcionan en los enlaces a continuación, que puede refactorizar para cumplir con sus requisitos.
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 ().
También hay este proyecto que hace el trabajo y funcionó perfectamente para mí: https://github.com/chrisbanes/PhotoView
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ámico lista para usar. Puede encontrarlo 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 This es una biblioteca de lienzo puro, por lo que puede usarse en cualquier escenario. Espero que esto ayude.