¿Cómo logra la programación de Android el efecto de amplificación de texto, como el efecto de acercar y alejar?
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); p >
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);
}
}