在android中改变lineargradient的float属性随时间的变化

时间:2013-12-26 16:43:43

标签: java android

我想用时间更改“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);

该方法有效,但动画似乎有点滞后,正如我所想。 所以我的问题是,如何更改此代码以获得流畅的动画?

更新:我使用了这两个代码,但仍然无法获得流畅的动画。

2 个答案:

答案 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。