Android(安卓)使用View的旋转实现漂亮的动画效果
16lz
2021-12-04
一、点击Icon,水平翻转360°后再打开应用效果:
class MyOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { switch (v.getId()) { case R.id.layoutMap: openAfterRotate(v); break; case R.id.layoutMusic: openAfterRotate(v); break; case R.id.layoutTongting: openAfterRotate(v); break; default: break; } }}
/** * 卡片水平旋转360度后再打开应用 * * @param view */private void openAfterRotate(final View view) { final int[] degreeRotate = { 0 }; new Thread(new Runnable() { @Override public void run() { for (int i = 1; i <= 36; i++) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } degreeRotate[0] = i * 10; mainHandler.post(new Runnable() { @Override public void run() { view.setRotationY(degreeRotate[0]); } }); if (i == 36) { switch (view.getId()) { case R.id.layoutMusic: OpenUtil.openModule(MainActivity.this, MODULE_TYPE.MUSIC); break; case R.id.layoutTongting: OpenUtil.openModule(MainActivity.this, MODULE_TYPE.TONG_TING); break; case R.id.layoutMap: OpenUtil.openModule(MainActivity.this, MODULE_TYPE.NAVI_GAODE_CAR_MIRROR); break; default: break; } } } } }).start();}
二、ViewPager翻页过程中渐进压缩特效:
viewPager.setOnSwipeListener(new TransitionViewPager.OnSwipeListener() { @Override public void onSwipe(int positionOffset) { setPageRotationByOffset(positionOffset); }});
private void setPageRotationByOffset(int positionOffset) { int degree = (int) (45 * ((float) positionOffset / 1280)); if (degree != nowDegree) { if (degree == 0 && Math.abs(nowDegree - degree) > 20) { new Thread(new Runnable() { @Override public void run() { for (int i = nowDegree; i > 0; i--) { try { Thread.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } mainHandler.post(new Runnable() { @Override public void run() { setPageRotationByDegree(--nowDegree); } }); } } }).start(); } else setPageRotationByDegree(degree); }}private int nowDegree = 0;private void setPageRotationByDegree(int degree) { MyLog.i("setPageRotationByOffset.DEGREE:" + degree); if (degree < 0) degree = 0; nowDegree = degree; if (isLoadA) { layoutTongting.setRotationX((int) (degree * 3.0)); layoutMap.setRotationX((int) (degree * 2.5)); layoutRecord.setRotationX((int) (degree * 2.0)); layoutPhone.setRotationX((int) (degree * 1.5)); } if (isLoadB) { layoutEDog.setRotationX((int) (degree * 0.8)); layoutXimalaya.setRotationX((int) (degree * 0.7)); layoutFMTransmit.setRotationX((int) (degree * 0.6)); layoutYiKa.setRotationX((int) (degree * 0.5)); layoutReplay.setRotationX((int) (degree * 0.4)); layoutMoreApp.setRotationX((int) (degree * 0.3)); }}
更多相关文章
- Android(安卓)P系统输出图像镜像翻转实现
- 2011.10.13(4)——— android android:layout_weight
- Android中自定义水平的ProgressBar
- Android新姿势:3D翻转效果原理
- Android中正确自适应屏幕翻转
- Android踩坑日记:自定义水平和圆形ProgressBar样式
- ScrollView常用属性汇总
- 使用android中drawline函数无法绘制水平线的解决办法
- Android(安卓)LinearLayout线性布局(上下左右 正中间)示例