【Android开发小记--7】动画--简单的button移动和图片3D翻转
来源:互联网 发布:大数据英文怎么说 编辑:程序博客网 时间:2024/05/01 01:10
button移动:
分别用视图和属性方法的XML配置与代码编写来实现
效果图:
MainActivity.java :
public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化监听 findViewById(R.id.button1).setOnClickListener(this); findViewById(R.id.button2).setOnClickListener(this); findViewById(R.id.button3).setOnClickListener(this); findViewById(R.id.button4).setOnClickListener(this); findViewById(R.id.imageView).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ //-----ViewAnimation---XML--------- case R.id.button1: v.startAnimation(AnimationUtils.loadAnimation(MainActivity.this,R.anim.anim_button)); break; //-----ViewAnimation---Java Code------- case R.id.button2: viewAnimation(v); break; //-----FrameAnimator---XML--------- case R.id.button3: frameAnimatorXML(v); break; //-----FrameAnimator---Java Code--------- case R.id.button4: frameAnimatorCode(v); break; //-----图片翻转----------------------------- case R.id.imageView: imageAnimate(v); break; default: break; } } /* ViewAnimation---Java Code */ private void viewAnimation(View v) { AnimationSet as = new AnimationSet(true); TranslateAnimation ta1 = new TranslateAnimation(0,200,0,0); ta1.setDuration(1000); as.addAnimation(ta1); TranslateAnimation ta2 = new TranslateAnimation(0,0,0,200); ta2.setDuration(1000); ta2.setStartOffset(1000); as.addAnimation(ta2); v.startAnimation(as); } /*FrameAnimator---XML*/ private void frameAnimatorXML(View v) { AnimatorSet animator = (AnimatorSet) AnimatorInflater.loadAnimator(this,R.animator.animator_button); animator.setTarget(v); animator.start(); } /*FrameAnimator---Java Code*/ private void frameAnimatorCode(View v) { AnimatorSet set = new AnimatorSet(); set.setDuration(1000); set.playSequentially(ObjectAnimator.ofFloat(v, "translationX", 0, 200), ObjectAnimator.ofFloat(v, "translationY", 0, 200), ObjectAnimator.ofFloat(v, "translationY", 200, 0), ObjectAnimator.ofFloat(v, "translationX", 200, 0)); set.start(); } /*图片翻转*/ private void imageAnimate(View v) { AnimationSet as = new AnimationSet(true); //首次翻转,使用自定义动画 ImageAnim3D ImageAnim3D imgAnim3D = new ImageAnim3D(false); imgAnim3D.setDuration(1000); v.measure(0, 0); imgAnim3D.setCenter(v.getWidth() / 2, v.getHeight() / 2); imgAnim3D.setFillAfter(true); as.addAnimation(imgAnim3D); //翻转回来 ImageAnim3D imgAnim3D2 = new ImageAnim3D(true); imgAnim3D2.setDuration(1000); imgAnim3D2.setStartOffset(1000); v.measure(0, 0); imgAnim3D2.setCenter(v.getWidth() / 2, v.getHeight() / 2); as.addAnimation(imgAnim3D2); v.startAnimation(as); }}
视图动画,res/anim 下:
anim_button.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="1000" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="200" android:toYDelta="0" /> <translate android:duration="1000" android:fromXDelta="0" android:fromYDelta="0" android:startOffset="1000" android:toXDelta="0" android:toYDelta="200" /></set>
属性动画,res/animator 下:
animator_button.xml
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="sequentially"> <objectAnimator android:duration="1000" android:propertyName="translationX" android:valueFrom="0" android:valueTo="200" /> <objectAnimator android:duration="1000" android:propertyName="translationY" android:valueFrom="0" android:valueTo="200" /> <objectAnimator android:duration="1000" android:propertyName="translationY" android:valueFrom="200" android:valueTo="0" /> <objectAnimator android:duration="1000" android:propertyName="translationX" android:valueFrom="200" android:valueTo="0" /></set>
imageView翻转:
自定义Animation() 为 ImageAnim3D( boolean turn ) ,turn为false代表正向翻转,true代表反向翻转。
ImageAnim3D.java
public class ImageAnim3D extends Animation { private float mCenterX = 0; private float mCenterY = 0; private boolean turn; //当为false则是正常翻转,为ture则是翻转回来 public ImageAnim3D(boolean turn) { this.turn = turn; } public void setCenter(float centerX, float centerY) { mCenterX = centerX; mCenterY = centerY; } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { Matrix matrix = t.getMatrix(); Camera camera = new Camera(); camera.save(); if (!turn) { //正向翻转 camera.rotateY(180 * interpolatedTime); } else { //反向翻转 camera.rotateY(-180 * interpolatedTime); } camera.getMatrix(matrix); camera.restore(); matrix.preTranslate(-mCenterX, (float) (-0.2 * mCenterY)); matrix.postTranslate(mCenterX, (float) (0.2 * mCenterY)); }}
具体代码点击
1 0
- 【Android开发小记--7】动画--简单的button移动和图片3D翻转
- 【Android开发小记--5】动画--两张图片轮回翻转
- 鼠标移动3D翻转动画特效
- Android自定义动画之实现3D翻转的动画
- Android动画之3D翻转动画
- css 3D翻转图片动画
- 简单实现Android图片翻转动画效果
- Android 简单3D动画开发
- Android 3d翻转动画(实例)
- android:3D垂直翻转动画-FlipAnimation
- 自定义 View 3d翻转动画 android
- Android 3D 水平翻转动画实现
- 【Android开发小记--6】动画--属性动画以及Fragment切换动画(3D)
- Android 图片翻转动画
- Android 图片翻转动画
- 用两张图片实现的2D动画效果(翻转)
- Android 简单的3D动画效果
- 2D图片翻转(Android)
- HDU 1045:Fire Net
- 有些事情不是看到希望才去坚持,而是坚持了才会看到希望
- 【贪心】[BZOJ1034]泡泡堂BNB
- C 语言结构体定义 使用
- swift构造方法
- 【Android开发小记--7】动画--简单的button移动和图片3D翻转
- 哈理工OJ 1692【水题】
- 基于IBM Bluemix的数据缓存应用实例
- 轻蔑这个,鄙视那个,眼高手低,好高骛远,有点料就忍不住到处兜售
- NSURLSession实现图片下载
- ZOJ 1002:Fire Net
- 查找算法之折半查找
- poj 3252 Round Numbers 【数位dp】
- C#成神之路<9> C#引用数据类型扩展