ListView项上onClick()期间的动画

时间:2015-10-02 17:56:12

标签: android listview animation

当我单击其中一个ListView元素时,TextView会显示(或消失),并且元素中四个组件的背景颜色会发生变化。

我的问题是它发生得非常快。有没有办法让我更顺利?像动画或其他东西。

我的OnCLickListener类:

private class TextViewOnClick implements TextView.OnClickListener {

    private TextView answerView;
    private TextView questionView;
    private Button tickButton;
    private Button crossButton;

    public TextViewOnClick(TextView answerView, TextView questionView, Button tick, Button cross) {
        this.answerView = answerView;
        this.questionView = questionView;
        this.tickButton = tick;
        this.crossButton = cross;
    }
    @Override
    public void onClick(View v) {
        if(answerView.getVisibility() == TextView.GONE) {
            answerView.setVisibility(TextView.VISIBLE);

            questionView.setBackgroundColor(Color.parseColor("#A6E7FF"));
            answerView.setBackgroundColor(Color.parseColor("#A6E7FF"));
            tickButton.setBackgroundColor(Color.parseColor("#A6E7FF"));
            crossButton.setBackgroundColor(Color.parseColor("#A6E7FF"));
        }
        else {
            answerView.setVisibility(TextView.GONE);

            questionView.setBackgroundColor(Color.parseColor("#FFFFFF"));
            answerView.setBackgroundColor(Color.parseColor("#FFFFFF"));
            tickButton.setBackgroundColor(Color.parseColor("#FFFFFF"));
            crossButton.setBackgroundColor(Color.parseColor("#FFFFFF"));
        }
    }
}

1 个答案:

答案 0 :(得分:1)

虽然您无法将颜色更改为较慢的动画,但您可以更改视图消失/看起来更慢。

查看ViewPropertyAnimator课程: http://developer.android.com/reference/android/view/ViewPropertyAnimator.html

你会用它来像这样:

    if(answerView.getVisibility() == TextView.GONE) {
        answerView.setAlpha(0);
        answerView.setVisibility(TextView.VISIBLE);
        answerView.animate().alpha(1).setDuration(500).withEndAction(new Runnable(){
            @Override
            public void run(){
                 questionView.setBackgroundColor(Color.parseColor("#A6E7FF"));
                 answerView.setBackgroundColor(Color.parseColor("#A6E7FF"));
                 tickButton.setBackgroundColor(Color.parseColor("#A6E7FF"));
                 crossButton.setBackgroundColor(Color.parseColor("#A6E7FF"));
            }
        );
    }
    else { 
     ...//follow the template above
    }

这样做(一步一步)是:

- 将视图设置为可见,但alpha为0.这使得组件对应用程序可见,但对用户不可见。

- 动画视图以使其对用户可见。 alpha(1)表示此视图在动画结束时将完全不透明,setDuration(500)表示动画将花费500毫秒(您可以更改此值)。

- 在动画结束时,使用withEndAction更改其他视图的颜色。