【Android开发小记--7】动画--简单的button移动和图片3D翻转
2016-02-04 23:40
651 查看
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)); } }
具体代码点击
相关文章推荐
- android service学习总结
- TextView设置selector后,没有点击效果
- Android_Studio快捷键和使用技巧
- Android Material Design I-基础知识
- Android开发设计模式之——单例模式
- Android隐藏状态栏、导航栏
- 解决 Android Studio 乱码问题
- 写一个Android输入法02——候选窗、转换
- Android虚拟机打不开解决方法
- Android开发学习之路--Activity之四种启动模式
- Android开发学习之路--Activity之四种启动模式
- Android 百度地图 SDK v3.0.0 (二) 定位与结合方向传感器
- android 支持分组和联系人展示的一个小样例
- Android性能优化之缓存的代码实现
- Android 沉浸式状态栏
- Android广播Broadcast的学习(附demo)
- Android性能优化之三级缓存
- Android 简单实现ListView指定ITEM滑到到顶停靠
- Android学习路线(二十四)ActionBar Fragment运用最佳实践
- android开发步步为营之93:android自定义view开发之一(验证码生成器)