2015-10-02 7 views
0

Когда я нажимаю на один из элементов ListView, TextView отображает (или исчезает) цвет backgroud из четырех компонентов в моем элементе.Анимация во время onClick() в элементе ListView

Моя проблема в том, что это происходит очень быстро. Есть ли способ сделать это более гладким? Как анимация или что-то еще.

мой 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")); 
     } 
    } 
} 
+0

Recyclerview намного лучше, особенно в отношении анимации - лучше использовать recyclerview здесь – ligi

ответ

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 
    } 

Что это делает (шаг за шагом) является:

множеств вида чтобы быть видимым, но с альфой 0. Это делает компонент видимым для приложения, но не для пользователя.

-изменяет вид, чтобы сделать его видимым для пользователя. alpha(1) означает, что к концу анимации этот вид будет полностью непрозрачным, а setDuration(500) означает, что анимация займет 500 мс (вы можете изменить это значение, конечно).

- В конце анимации используется withEndAction, чтобы изменить цвет ваших других видов.

Смежные вопросы