Quiero rotar una vista de imagen de 30 grados en cada clic en un botón.Android gire imageview, no puedo establecer la posición final de imageview en onAnimationEnd()
En el primer clic, puedo configurar la animación correctamente pero no puedo actualizar la posición de la imagen después de la animación. Cuando volví a hacer clic en el botón, la animación comienza desde la posición original de la vista de la imagen y no desde la posición final después de la primera animación.
Aquí está mi código:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
turnImg = (ImageView) findViewById(R.id.imageViewturnImg);
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.imgTurn);
// Getting width & height of the given image.
int w = bmp.getWidth();
int h = bmp.getHeight();
turnImg .setImageBitmap(bmp);
Button buttonok = (Button) findViewById(R.id.buttonok);
buttonok.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
turn();
}
});
}
public void turn()
{
float degrees = 30;
RotateAnimation anim = new RotateAnimation(0, degrees,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
anim.setInterpolator(new LinearInterpolator());
anim.setDuration(300);
anim.setFillEnabled(true);
anim.setFillAfter(true);
anim.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationEnd(Animation arg0) {
Matrix mat = turnImg.getImageMatrix();
mat.postRotate(30,turnImg.getWidth()/2, turnImg.getHeight()/2);
turnImg.setScaleType(ScaleType.MATRIX);
turnImg.setImageMatrix(mat);
}
@Override
public void onAnimationRepeat(Animation animation) {}
@Override
public void onAnimationStart(Animation animation) {}
});
turnImg.startAnimation(anim);
}
Creo que el problema venía de la manera que me actualizo la posición en el onAnimationEnd().
ps: lo siento por mi mala Inglés ...
El hecho es que después de rotar la imagen real, se debe cancelar el "relleno después". Intenté añadiendo aAnimationEnd() la línea 'turnImg.clearAnimation()', pero tengo un error tremendo (al menos en el emulador), exactamente lo mismo que sucede si simplemente eliminas el relleno después. – bigstones
Estaba pensando que mybe el problema es causado por setScaleType (ScaleType.MATRIX); En mi xml, la imagen vista turnImg está configurada en android: scaleType = "center" – colorado
Lo que configura en el código simplemente anula lo que establece en xml, por lo que no hay conflicto. A medida que crea la animación mediante programación, puede crearla con el último ángulo que alcanzó como ángulo de inicio, con "llenar después" y sin rotación de la matriz.Sin embargo, no sé cómo se comporta con ángulos> 360 °. – bigstones