Red de conocimiento informático - Computadora portátil - ¿Cómo logra la programación de Android el efecto de amplificación de texto, como el efecto de acercar y alejar?

¿Cómo logra la programación de Android el efecto de amplificación de texto, como el efecto de acercar y alejar?

Importar actividad de aplicaciones de Android;

Importar gráficos de Android. /p>

Importar gráficos de Android .pointf;

Importar sistema operativo . Vista de Android. Evento de movimiento;

Importar vista de Android.

Importar vista de Android. group . marginlayoutparams;

Importar Android . imageview;

La clase pública MainActivity extiende la actividad para implementar OnTouchListener {

/** Se llama cuando la actividad es la primera. creado. */

//Acercar y alejar

Matriz Matriz = nueva Matriz();

Matriz guardada Matriz = nueva Matriz();

PointF start = new PointF();

PointF mid = new PointF();

float oldDist

ImageView privada myImageView

>//Modo

static final int NONE = 0;

static final int DRAG = 1;

static final int ZOOM = 2;

int mode = NONE

@override

public void on create(Paquete guardado estado de instancia){

super oncreate(savedInstanceState);

setContentView(r . diseño . actividad _ principal);

mi ImageView =(ImageView)findViewById(r . id . mi imagen

mi vista de imagen . ( this);

}

@override

onTouch público booleano (ver v, evento de evento de movimiento){

ImageView mi ImageView = (ImageView)v;

switch(event.getaction() & motion event.ACTION_MASK) {

//Establecer modo de arrastre

Evento de movimiento del caso.

Action_Down:

matriz .set(mi vista de imagen. getimage matriz());

savedMatrix.set(matriz

start.set( event.getX); (), event.gety());

Modo = arrastrar;

Pausa;

Evento de movimiento del caso. action_action:

Evento de moción de caso. action_pointer_up:

Modo=none;

Pausa;

//Establecer modo multitáctil

Evento de movimiento del caso. Action_Pointer_Down:

oldDist = espaciado(evento);

if(old dist gt;10f) {

savedMatrix.set(matrix);

Punto medio(medio,evento);

Modo=zoom;

}

Interrupción;

//Si es así Modo de arrastre, haga clic para mover la imagen.

Eventos de movimiento de casos. Action_Move:

if (modo == ARRASTRAR) {

matriz . set(matriz guardada

post traducir(evento . getx()-). start.x,event.getY()

-start.y);

}

//Si está en modo zoom, haga clic en tocar para hacer zoom.

else if (modo == ZOOM) {

float newDist = spacing(event);

if(new dist gt;10f) {

matrix set(matriz guardada);

escala flotante = nueva dist/antigua dist;

//Establece la relación de zoom y la posición del punto medio de la imagen.

matrix.postScale(Escala,escala,mid.x,mid.y);

}

}

Romper;

}

myImageView.setImageMatrix(matrix);

Devuelve verdadero

}

//Calcular el movimiento distancia

Espaciado flotante privado (evento MotionEvent){

float x = evento getx(0)-event

float y =. evento . gety(0)-event . gety(1);

Devuelve float sqrt(x * x y * y);

}

/ / Calcular la posición del punto medio

Punto aéreo privado (punto PointF, evento MotionEvent){

float x = evento getx(0) getx(1); p>flotador y = evento . gety(0) evento . gety(1);

point.set(x/2,y/2);

}

}