为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > [教学]简单实现Android图片翻转动画效果

[教学]简单实现Android图片翻转动画效果

2018-03-26 10页 doc 52KB 12阅读

用户头像

is_954223

暂无简介

举报
[教学]简单实现Android图片翻转动画效果[教学]简单实现Android图片翻转动画效果 简单实现Android图片翻转动画效果 不说废话,先看效果。 这是原始图片的样子 这是翻转后的效果图 如果是你想要的效果,那么继续往下看,如果不是,那可以跳过了。 这是一个动画,而不是用matrix实现的直接翻转图片。 可能网上有很多例子了,但我这是我自己实验过的,单纯的翻转一张图片。 我这个是根据APIDemo简单修改写的 需要一个Rotate3d 类,继承Animation public class Rotate3d extends Animation{ p...
[教学]简单实现Android图片翻转动画效果
[教学]简单实现Android图片翻转动画效果 简单实现Android图片翻转动画效果 不说废话,先看效果。 这是原始图片的样子 这是翻转后的效果图 如果是你想要的效果,那么继续往下看,如果不是,那可以跳过了。 这是一个动画,而不是用matrix实现的直接翻转图片。 可能网上有很多例子了,但我这是我自己实验过的,单纯的翻转一张图片。 我这个是根据APIDemo简单修改写的 需要一个Rotate3d 类,继承Animation public class Rotate3d extends Animation{ private final float mFromDegrees; private final float mToDegrees; private final float mCenterX; private final float mCenterY; private final float mDepthZ; private final boolean mReverse; private Camera mCamera; public Rotate3d(float fromDegrees, float toDegrees, float centerX, float centerY, float depthZ, boolean reverse) { mFromDegrees = fromDegrees; mToDegrees = toDegrees; mCenterX = centerX; mCenterY = centerY; mDepthZ = depthZ; mReverse = reverse; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); mCamera = new Camera(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final float fromDegrees = mFromDegrees; float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime); final float centerX = mCenterX; final float centerY = mCenterY; final Camera camera = mCamera; final Matrix matrix = t.getMatrix(); camera.save(); if (mReverse) { camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime); } else { camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime)); } camera.rotateY(degrees); camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } } 这个类可以直接拷过去,不用做任何的修改。其中的方法自己找相关资料研究。 在main.xml里加个ImageView,如 > 这个不需要解释吧,都可以看懂的 最后,还需要一个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); } } } 代码里主要的地方我都注释了,大家自己看看,其他的都是不需要改,但也可根据自己实际需要来修改 我这里比较适合一张图片的翻转,如果是多张图片,可以参考APIDemo里的例子,就是加个ArrayAdapter,还是简单的,也可以自己发挥修改,实现自己想要的。 这里的代码基本上可以直接运行项目了。 供大家参考,希望大家实现出更多更强大的效果。 我刚研究这个动画2天,还很多不会,如有不足之处,欢迎大家提出来一起研究。
/
本文档为【[教学]简单实现Android图片翻转动画效果】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索