我想用时间更改“lineargradient”的float属性,其中lineargradient应用于textview(即动画渐变),所以我在onCreate()类中创建了一个处理程序。 处理程序如下所示。
TextView textDisplay;
TextView textCounter;
Shader shaderGradient;
int counter = 0;
int finalCounter = 0;
final Handler styleHandler = new Handler();
Runnable runStyle = new Runnable(){
public void run(){
if(counter<=260){
textCounter.setText("" + counter);
String finalString = textCounter.getText().toString();
if(finalString.matches("\\d+")){
finalCounter = Integer.parseInt(finalString);
}
int x0coordinate = finalCounter - 20;
int x1coordinate = x0coordinate + 20;
shaderGradient = new LinearGradient(x0coordinate, 0, x1coordinate, 0, new int[] {Color.parseColor("#ff000000"), Color.parseColor("#ffffffff"), Color.parseColor("#ff000000")}, new float[]{0,1,1}, TileMode.CLAMP);
textDisplay.getPaint().setShader(shaderGradient);
counter++;
} else{
counter = 0;
}
styleHandler.postDelayed(this, 100);
}
};
styleHandler.postDelayed(runStyle, 100);
该方法有效,但动画似乎有点滞后,正如我所想。 所以我的问题是,如何更改此代码以获得流畅的动画?
更新:我使用了这两个代码,但仍然无法获得流畅的动画。
答案 0 :(得分:0)
我认为,设置一个fps,每秒帧数,可能是因为你的线程运行得太快,即每帧中的计数器++。
睡觉了。不是你显然:P, 它只是在计数器中的任何增量之前添加睡眠Thread.sleep(10);
counter++;
这会将动画设置为100fps,即1000/10。类似地,对于25fps,设置Thread.sleep(40); ..尝试至少。希望有效:)
答案 1 :(得分:0)
使用postDelayed(this, 100)
,你有 10fps 动画。通常,平滑动画至少使用 24fps 。因此,请尝试将延迟更改为postDelayed(this, 1000/24)
,然后您将获得24fps。