首页 > 系统 > Android > 正文

Android图片翻转动画简易实现代码

2019-10-24 21:10:50
字体:
来源:转载
供稿:网友
Android图片翻转动画效果如何实现,本文将给你一个惊喜,实现代码已经列出,需要的朋友可以参考下
 

下面给大家分享一个有趣的动画:这里比较适合一张图片的翻转,如果是多张图片,可以参考APIDemo里的例子,就是加个ArrayAdapter,还是简单的,也可以自己发挥修改,实现自己想要的。这里的代码基本上可以直接运行项目了。 
在main.xml里加个ImageView,如 

复制代码代码如下:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/container" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<ImageView 
android:id="@+id/image" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Rotate" 
android:textSize="50px" 
android:layout_x="150px" 
android:layout_y="30px" 
android:src="@drawable/ro"> 
></ImageView> 
</FrameLayout> 

这个不需要解释吧,都可以看懂的 
最后,还需要一个activity类 
如: 
复制代码代码如下:

public class TestRotate extends Activity implements OnClickListener{ 
private mageView imageview; 
private ViewGroup mContainer; 
/** 
*这个变量设置的是图片,如果是多张图片,那么可以用数组,如 
*private static final int IMAGE = new int[]{ 
* R.drawable.ro, 
* R.drawable.icon 
*}; 
*有多少图片就放多少,我这里做的只是一张图片的翻转 

*/ 
private static final int IMAGE = R.drawable.ro; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
imageview = (ImageView) findViewById(R.id.image); 
mContainer = (ViewGroup) findViewById(R.id.container); 
/** 
* 设置最新显示的图片 
* 如果是数组,那么可以写成IMAGE[int] 

*/ 
imageview.setImageResource(IMAGE); 
/** 

* 设置ImageView的OnClickListener 

*/ 
imageview.setClickable(true); 
imageview.setFocusable(true); 
imageview.setOnClickListener(this); 

private void applyRotation(int position, float start, float end) { 
// Find the center of the container 
final float centerX = mContainer.getWidth() / 2.0f; 
final float centerY = mContainer.getHeight() / 2.0f; 
final Rotate3d rotation = 
new Rotate3d(start, end, centerX, centerY, 310.0f, true); 
rotation.setDuration(500); 
rotation.setFillAfter(true); 
rotation.setInterpolator(new AccelerateInterpolator()); 
rotation.setAnimationListener(new DisplayNextView(position)); 
mContainer.startAnimation(rotation); 

@Override 
public void onClick(View v) { 
// TODO Auto-generated method stub 
/** 

* 调用这个方法,就是翻转图片 
* 参数很简单,大家都应该看得懂 
* 简单说下,第一个是位置,第二是开始的角度,第三个是结束的角度 
* 这里需要说明的是,如果是要回到上一张 
* 把第一个参数设置成-1就行了 

*/ 
applyRotation(0,0,90); 

private final class DisplayNextView implements Animation.AnimationListener { 
private final int mPosition; 
private DisplayNextView(int position) { 
mPosition = position; 

public void onAnimationStart(Animation animation) { 

public void onAnimationEnd(Animation animation) { 
mContainer.post(new SwapViews(mPosition)); 

public void onAnimationRepeat(Animation animation) { 


/** 
* This class is responsible for swapping the views and start the second 
* half of the animation. 
*/ 
private final class SwapViews implements Runnable { 
private final int mPosition; 
public SwapViews(int position) { 
mPosition = position; 

public void run() { 
final float centerX = mContainer.getWidth() / 2.0f; 
final float centerY = mContainer.getHeight() / 2.0f; 
Rotate3d rotation; 
if (mPosition > -1) { 
imageview.setVisibility(View.VISIBLE); 
imageview.requestFocus(); 
rotation = new Rotate3d(90, 180, centerX, centerY, 310.0f, false); 
} else { 
imageview.setVisibility(View.GONE); 
rotation = new Rotate3d(90, 0, centerX, centerY, 310.0f, false); 

rotation.setDuration(500); 
rotation.setFillAfter(true); 
rotation.setInterpolator(new DecelerateInterpolator()); 
mContainer.startAnimation(rotation); 


 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表