这样设置过渡动画,让你的Android手机变得更丝滑

前言

通过合理的设置安卓中过渡动画的缩放速度,可以让安卓手机中窗口的切换更自然、更流畅,操作上感觉更加的丝滑。安卓手机上一般有窗口动画缩放(window_animation_scale)、过渡动画缩放(transition_animation_scale)和Animator时长缩放(animator_duration_scale)可做设置。

但是大多安卓系统对于动画缩放速度的设置大多只有几个档位,如0.5x、0.75x、1x、1.5x、2x、5x、10x,无法随心所欲的调节,而且档位不多,无论怎么做组合,要不就是感觉动画快了,要不就是慢了,亦或是感觉生硬。本文带来的就是打破这个局限,随性DIY,找到那个最适合你的。

开始

首先本文是通过adb的方式改变安卓手机系统的动画缩放速度,而且脚本中adb的连接方式为USB连接。

步骤:

  1. 手机USB连接电脑
  2. 打开你安卓手机的开发者选项(如已开启进入下一步;如何开启,可以百度搜索自己手机怎么开启开发者选项)
  3. 进入开发者选择,打开USB调试,允许使用USB调试,手机可能会提示授权电脑允许USB调试,请点确认
  4. 下载文件SetAnimation.zip,解压,双击SetAnimation文件夹下的SetAnimation.bat脚本运行
  5. 脚本会连接手机,手机可能会提示授权电脑允许USB调试,请点确认
  6. 按照脚本的菜单设置即可,一般实测设置1.2-1.4会感觉比较丝滑,脚本限制了动画速度只能在0-10

检查是否设置成功:

  • 脚本在菜单页面会获取并显示你手机目前的缩放速度
  • 设置后检查开发者选项里动画缩放,原来为1x,设置为1.25x,若从1x变为1.5x则设置成功
  • 可以设置一个大一点的值,如5,可以明显感觉到动画过渡得很慢。

注意:设置完把USB调试给关了!!!

脚本界面:
SetAnimation

附录

代码附录,Windows的bat脚本,依赖于adb,照猫画虎写的,没啥技术含量,方便大家设置安卓的动画缩放速度。如果你有adb环境,可以保存成bat文件在Windows直接运行。

@REM @Author: Myles
@REM @Date:   2020-03-04 23:20:52

@echo off
title 安卓动画缩放设置


:checkConnected
echo.&echo 正在连接安卓设备...
for /f "delims=" %%i in ('adb devices') do (set status=%%i)
echo %status%|findstr "attached unauthorized" && (goto failToConnect) || (goto menu)

 
:failToConnect
cls
echo 连接手机失败,请检查USB调试是否打开和允许!
echo.&echo 按任意键重试...
set /p pass=
goto checkConnected

:menu
cls
echo.&echo   提示:
echo.&echo   建议设置在1.2x-1.4x之间,较为丝滑,多设置试试效果
echo.&echo   设置后检查开发者选项里动画缩放,原来为1x,设置为1.25x,若从1x变为1.5x则设置成功
echo.
echo.&echo   您手机目前的动画缩放值分别为:
for /f "delims=" %%i in ('adb shell settings get global window_animation_scale') do (set cur_was=%%i)
for /f "delims=" %%i in ('adb shell settings get global transition_animation_scale') do (set cur_tas=%%i)
for /f "delims=" %%i in ('adb shell settings get global animator_duration_scale') do ( set cur_ads=%%i)
echo.&echo   窗口动画缩放:%cur_was%x   过渡动画缩放:%cur_tas%x   Animator时长缩放:%cur_ads%x
echo.
echo.&echo   请选择您要执行的操作:
echo.&echo  【1】默认设置(全部设为1.25x)
echo.&echo  【2】一次设置(全部设为一个值)
echo.&echo  【3】逐项设置(一项项设置)
echo.&echo  【4】退出
echo.

set /p sel=请输入数字后回车:
If "%sel%"=="1" (goto setAnimation)
If "%sel%"=="2" (goto setAnimationAtOnce)
If "%sel%"=="3" (goto setAnimationOneByOne)
If "%sel%"=="4" (goto exit)
echo.&echo 输入无效,请重新输入!
pause
goto menu


:setAnimation
:: 窗口动画缩放
adb shell settings put global window_animation_scale 1.25
:: 过渡动画缩放
adb shell settings put global transition_animation_scale 1.25
:: Animator时长缩放
adb shell settings put global animator_duration_scale 1.25

echo.&echo 完成,请检查过渡动画是否设置成功!
echo.&pause
goto menu


:setAnimationAtOnce
echo.
set /p val=请输入0-10的缩放值:
call:verifyInput %val%, setAnimationAtOnce
:: 窗口动画缩放
adb shell settings put global window_animation_scale %val%
:: 过渡动画缩放
adb shell settings put global transition_animation_scale %val%
:: Animator时长缩放
adb shell settings put global animator_duration_scale %val%

echo.&echo 完成,请检查过渡动画是否设置成功!
echo.&pause
goto menu


:setAnimationOneByOne
echo.

:: 窗口动画缩放
:was
echo.&set /p was=请输入0-10的窗口动画缩放值(window_animation_scale):
call:verifyInput %was%, was
adb shell settings put global window_animation_scale %was%

:: 过渡动画缩放
:tas
echo.&set /p tas=请输入0-10的过渡动画缩放值(transition_animation_scale):
call:verifyInput %tas%, tas
adb shell settings put global transition_animation_scale %tas%

:: Animator时长缩放
:ads
echo.&set /p ads=请输入0-10的过渡动画缩放值(animator_duration_scale):
call:verifyInput %ads%, ads
adb shell settings put global animator_duration_scale %ads%

echo.&echo 完成,请检查过渡动画是否设置成功!
echo.&pause
goto menu


@REM 检验输入值(val, goto)
:verifyInput
if %~1 lss 0 (
	echo.&echo 非法输入,请输入0-10的缩放值
	goto %~2
)
if %~1 gtr 10 (
	echo.&echo 非法输入,请输入0-10的缩放值
	goto %~2
)
goto:eof

:: 退出
:exit
taskkill /f /im adb.exe
exit
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要绘制丝滑的折线,可以使用贝塞尔曲线来平滑处理折线的转折点。具体实现步骤如下: 1. 自定义一个 SmoothLineChartView 继承自 View,重写 onDraw 方法: ``` public class SmoothLineChartView extends View { private Paint mLinePaint; private Path mPath; public SmoothLineChartView(Context context) { this(context, null); } public SmoothLineChartView(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { // 初始化画笔 mLinePaint = new Paint(); mLinePaint.setColor(Color.BLUE); mLinePaint.setStrokeWidth(5); mLinePaint.setStyle(Paint.Style.STROKE); mLinePaint.setAntiAlias(true); // 初始化路径 mPath = new Path(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制折线 canvas.drawPath(mPath, mLinePaint); } public void setChartData(List<PointF> points) { // 生成贝塞尔曲线路径 mPath.reset(); for (int i = 0; i < points.size() - 1; i++) { PointF p1 = points.get(i); PointF p2 = points.get(i + 1); float wt = (p2.x - p1.x) / 2; PointF p3 = new PointF(p1.x + wt, p1.y); PointF p4 = new PointF(p2.x - wt, p2.y); if (i == 0) { mPath.moveTo(p1.x, p1.y); } mPath.cubicTo(p3.x, p3.y, p4.x, p4.y, p2.x, p2.y); } // 刷新界面 invalidate(); } } ``` 2. 在 Activity 中使用 SmoothLineChartView,并传入折线的数据点: ``` public class MainActivity extends AppCompatActivity { private SmoothLineChartView mChartView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化 SmoothLineChartView mChartView = findViewById(R.id.chart_view); // 生成数据点 List<PointF> points = new ArrayList<>(); for (int i = 0; i < 10; i++) { float x = i * 100; float y = (float) (Math.random() * 500); points.add(new PointF(x, y)); } // 设置数据 mChartView.setChartData(points); } } ``` 在 setChartData 方法中,使用贝塞尔曲线平滑处理数据点,生成路径,并在 onDraw 方法中绘制路径。这样就可以绘制出丝滑的折线了。 希望对您有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值