All*_*lil 4 android android-animation android-imageview
我正在开发一个工作简单且工作效率很高的应用程序.但我有一个地方,我正在寻找一些看起来不太好的东西,那就是翻动动画.
我想要的是 :
我在按钮下面有一个Button和一个ImageView.在按钮上单击我想制作一个动画,它看起来像ImageView已翻转,下一个图像显示在ImageView中.因此,每次点击它都应该显示下一个带有翻转动画的图像,但是存在一些问题.我稍后会讨论,但首先让我告诉你我是如何做到的.
到目前为止我做了什么:
flipping.xml
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:valueFrom="0" android:valueTo="180" android:propertyName="rotationY" >
</objectAnimator>
Run Code Online (Sandbox Code Playgroud)
在活动中
@Override
public void onClick(View v) {
flipAnimation();
ivAnimPicture.setImageResource(myImage1);
}
private void flipAnimation(){
ObjectAnimator anim = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.flipping);
anim.setTarget(ivAnimPicture);
anim.setDuration(1500);
anim.start();
}
Run Code Online (Sandbox Code Playgroud)
问题
当它从0旋转到180时,当它完全达到90度时,我们可以看到图像视图边缘,因此它使动画看起来不那么好.并且图像也会先改变然后翻转动画开始,因为我想要翻转动画应该开始,在它的中间应该出现新图像.因此,当动画停止时,应该为用户提供令人惊讶的新图像.所以我真的不希望在图像视图中设置Image,然后动画启动并为图像视图设置动画
请建议我更好的方式或者有没有过时的图书馆.
use*_*538 11
Chathuranga的解决方案将完成这项工作.但你最好:
1.使用ViewPropertyAnimator.特别是,当您需要对几个动画执行不同的动画时ImageViews.
2.从第二次翻转270f到360f第二次翻转,否则您的图像将被镜像.
3. Drawable 在开始动画之前将第二张图像加载到a中,以获得平滑的旋转.
final Drawable drawable=getResources().getDrawable(R.drawable.a);
final ImageView iv = ((ImageView)findViewById(R.id.imageView1));
iv.setRotationY(0f);
iv.animate().rotationY(90f).setListener(new AnimatorListener()
{
@Override
public void onAnimationStart(Animator animation)
{
}
@Override
public void onAnimationRepeat(Animator animation)
{
}
@Override
public void onAnimationEnd(Animator animation)
{
iv.setImageDrawable(drawable);
iv.setRotationY(270f);
iv.animate().rotationY(360f).setListener(null);
}
@Override
public void onAnimationCancel(Animator animation)
{
}
});
Run Code Online (Sandbox Code Playgroud)
尝试这段简单的代码并让我知道
ObjectAnimator anim = (ObjectAnimator) AnimatorInflater.loadAnimator(this, R.animator.flipping);
anim.setTarget(ivAnimPicture);
anim.setDuration(1500);
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
ivAnimPicture.setImageResource(myImage1);
}
});
anim.start();
Run Code Online (Sandbox Code Playgroud)