广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-03 22:30:50 次阅读 稿源:互联网
    广告

    下面给大家分享一个有趣的动画:这里比较适合一张图片的翻转,如果是多张图片,可以参考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);
    }
    }
    }

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告