平常用到的一些比较机智的动画
1.ViewCompat
ServiceApp里面看到一个二维码扫描/条形码输入的一个界面,两个界面放在一个Activity里面,切换二维码扫描跟条形码输入的时候会有一个过渡动画,
1.1先设置要做过渡动画的View
ViewCompat.setAlpha(rlBlur, 0);
1.2 在该显示的时候, 设置VISIBLE,(默认应该是GONE)
1 2 3
| rlBlur.setVisibility(View.VISIBLE); rlBlur.setBackground(new BitmapDrawable(null, blurBg)); ViewCompat.animate(rlBlur).alpha(1).setDuration(400).start();
|
1.3 在不显示的时候是指GONE和透明度
1 2
| rlBlur.setVisibility(View.GONE); ViewCompat.setAlpha(rlBlur, 0);
|
1.4 也可以设置一些监听操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| switch (v.getId()) { case R.id.tv_qr_scan: if (!tvQrScan.isSelected()) { tvCodeInput.setSelected(false); tvQrScan.setSelected(true); ViewCompat.animate(llInput).alpha(0).setDuration(400).setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { } @Override public void onAnimationEnd(View view) { llInput.setVisibility(View.GONE); } @Override public void onAnimationCancel(View view) { } }).start(); mQRCodeView.startSpot(); } break; case R.id.tv_code_input: if (!tvCodeInput.isSelected()) { tvQrScan.setSelected(false); tvCodeInput.setSelected(true); ViewCompat.animate(llInput).alpha(1).setDuration(400).setListener(new ViewPropertyAnimatorListener() { @Override public void onAnimationStart(View view) { llInput.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(View view) { } @Override public void onAnimationCancel(View view) { } }).start(); mQRCodeView.stopSpot(); } break;
|
感觉用起来还不错,有需要可以用这个,在两个VIEW切换的时候用,显得切换不会那么生硬。
2.Activity启动退出动画
2.1.首先在res/anim
文件夹下创建进入和退出动画的set
这里以底部上滑出现和从顶部下滑退出为例:
activity_open.xml
:
1 2 3 4 5 6 7 8
| <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="1500" /> </set>
|
:1 2 3 4 5 6 7 8 9
| ```xml <?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="25" android:toYDelta="100%p" android:duration="1500" /> </set>
|
2.2.设置启动动画:
1 2 3 4
| Intent intent = new Intent(); intent.setClassName(cxt,"com.test.mrn.android.route.RouteDemoActivity"); startActivity(intent); overridePendingTransition(R.anim.activity_open,0);
|
2.3.设置关闭动画
1 2 3 4 5 6 7
| button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); overridePendingTransition(0, R.anim.activity_close); } });
|
3.使用style的方式定义Activity的切换动画
3.1 定义Application的style
1 2 3 4 5
| <application android:allowbackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsrtl="true" android:theme="@style/AppTheme"> </application>
|
3.2 定义具体的AppTheme样式
其中这里的windowAnimationStyle就是我们定义的Actvity切换动画的style。而@anim/slide_in_top
就是我们定义的动画文件。也就是说通过切换Application的style,然后为windowAnimationStyle设置动画文件就可以全局的为Activity跳转配置动画效果:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <<!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> <item name="android:windowAnimationStyle">@style/activityAnim</item> </style> <!-- 使用style方式定义activity切换动画 --> <style name="activityAnim"> <item name="android:activityOpenEnterAnimation">@anim/slide_in_top</item> <item name="android:activityOpenExitAnimation">@anim/slide_in_top</item> </style>
|
在windowAnimationStyle存在四中动画:
- activityOpenEnterAnimation
- activityOpenExitAnimation
- activityCloseEnterAnimation
- activityCloseExitAnimation