0

Мне нужно анимировать textview с текстом D. но когда я запускаю программу, он оживляет как textview с текстом A и textview с текстом D. textview с текстом A является первым textview в списке.Android TextView Анимация вопрос

public class CustomArrayAdapter extends ArrayAdapter<String> { 

private Context context; 
private int layoutResourceId; 
private List<String> data = null; 

public CustomArrayAdapter(Context cont, int textViewResourceId, 
     List<String> horaNames) { 
    super(cont, textViewResourceId, horaNames); 

    this.layoutResourceId = textViewResourceId; 
    this.context = cont; 
    this.data = horaNames; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    ItemHolder holder = null; 
    if (row == null) { 
     LayoutInflater inflater = LayoutInflater.from(context); 

     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new ItemHolder(); 
     holder.itemTV = (TextView) row.findViewById(R.id.listItemTV); 

     row.setTag(holder); 
    } else { 
     holder = (ItemHolder) row.getTag(); 
    } 

    // set list view background color 
    row.setBackgroundColor(Color.DKGRAY); 

    holder.itemTV.setText(data.get(position)); 

    Animation textAnimation = null; 

    if (data.get(position).equals("A")) { 
     holder.itemTV.setTextColor(Color.CYAN); 
    } else if (data.get(position).equals("B")) { 
     holder.itemTV.setTextColor(Color.GREEN); 
    } else if (data.get(position).equals("C")) { 
     holder.itemTV.setTextColor(Color.MAGENTA); 
    } else if (data.get(position).equals("D")) { 
     holder.itemTV.setTextColor(Color.RED); 
     textAnimation = new AlphaAnimation(0.0f, 1.0f); 
     textAnimation.setDuration(800); 
     textAnimation.setStartOffset(20); 
     textAnimation.setRepeatMode(Animation.REVERSE); 
     textAnimation.setRepeatCount(Animation.INFINITE); 
     holder.itemTV.startAnimation(textAnimation); 
    } else if (data.get(position).equals("E")) { 
     holder.itemTV.setTextColor(Color.WHITE); 
    } else if (data.get(position).equals("F")) { 
     holder.itemTV.setTextColor(Color.YELLOW); 
    } else if (data.get(position).equals("G")) { 
     holder.itemTV.setTextColor(Color.BLUE); 
    } 
    textAnimation = null; 
    return row; 
} 

static class ItemHolder { 
    TextView itemTV; 
} 

Как я могу это решить? Мне нужно анимировать textview с текстом D.

ОБНОВЛЕНО

main_list_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal" 
    android:padding="5dip" > 

    <TextView 
     android:id="@+id/listItemTV" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:textSize="20sp" 
     android:textStyle="bold" /> 

</RelativeLayout> 

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".MainActivity" > 

    <ListView 
     android:id="@+id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:divider="#b5b5b5" 
     android:dividerHeight="1dp" /> 

</RelativeLayout> 

Complete project download.

Link 2

+0

вставить XML-файл – anand

+0

@anand [Полный проект скачать] (HTTPS://www.dropbox.com/s/x8aqibnacr8hnu6/ListAnimation.rar) – Bishan

+0

не могли бы вы разместить xml здесь при переполнении стека? – nio

ответ

1

изменить метод GetView(), как это, то он работает ..

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    ItemHolder holder = null; 
    if (row == null) { 
     LayoutInflater inflater = LayoutInflater.from(context); 

     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new ItemHolder(); 
     holder.itemTV = (TextView) row.findViewById(R.id.listItemTV); 

     row.setTag(holder); 
    } else { 
     holder = (ItemHolder) row.getTag(); 
    } 

    // set list view background color 
    row.setBackgroundColor(Color.DKGRAY); 

    holder.itemTV.setText(data.get(position)); 

    Animation textAnimation = null; 

    if (data.get(position).equals("A")) { 
     holder.itemTV.setTextColor(Color.CYAN); 
    } else if (data.get(position).equals("B")) { 
     holder.itemTV.setTextColor(Color.GREEN); 
    } else if (data.get(position).equals("C")) { 
     holder.itemTV.setTextColor(Color.MAGENTA); 
    } else if (data.get(position).equals("D")) { 
     holder.itemTV.setTextColor(Color.RED); 
    } else if (data.get(position).equals("E")) { 
     holder.itemTV.setTextColor(Color.WHITE); 
    } else if (data.get(position).equals("F")) { 
     holder.itemTV.setTextColor(Color.YELLOW); 
    } else if (data.get(position).equals("G")) { 
     holder.itemTV.setTextColor(Color.BLUE); 
    } 

    if (holder.itemTV.getText().equals("D")) { 
     textAnimation = new AlphaAnimation(0.0f, 1.0f); 
     textAnimation.setDuration(800); 
     textAnimation.setStartOffset(20); 
     textAnimation.setRepeatMode(Animation.REVERSE); 
     textAnimation.setRepeatCount(Animation.INFINITE); 
     holder.itemTV.setAnimation(textAnimation); 
    } else if (holder.itemTV.getText().equals("A")) { 
     holder.itemTV.setAnimation(null); 
    } 

    textAnimation = null; 
    return row; 
} 

это также works..i думаю, что это один является лучше..

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    ItemHolder holder = null; 
    if (row == null) { 
     LayoutInflater inflater = LayoutInflater.from(context); 

     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new ItemHolder(); 
     holder.itemTV = (TextView) row.findViewById(R.id.listItemTV); 

     row.setTag(holder); 
    } else { 
     holder = (ItemHolder) row.getTag(); 
    } 

    // set list view background color 
    row.setBackgroundColor(Color.DKGRAY); 

    holder.itemTV.setText(data.get(position)); 

    Animation textAnimation = null; 

    if (data.get(position).equals("A")) { 
     holder.itemTV.setTextColor(Color.CYAN); 
     holder.itemTV.setAnimation(null); 
    } else if (data.get(position).equals("B")) { 
     holder.itemTV.setTextColor(Color.GREEN); 
    } else if (data.get(position).equals("C")) { 
     holder.itemTV.setTextColor(Color.MAGENTA); 
    } else if (data.get(position).equals("D")) { 
     holder.itemTV.setTextColor(Color.RED); 
     textAnimation = new AlphaAnimation(0.0f, 1.0f); 
     textAnimation.setDuration(800); 
     textAnimation.setStartOffset(20); 
     textAnimation.setRepeatMode(Animation.REVERSE); 
     textAnimation.setRepeatCount(Animation.INFINITE); 
     holder.itemTV.setAnimation(textAnimation); 
    } else if (data.get(position).equals("E")) { 
     holder.itemTV.setTextColor(Color.WHITE); 
    } else if (data.get(position).equals("F")) { 
     holder.itemTV.setTextColor(Color.YELLOW); 
    } else if (data.get(position).equals("G")) { 
     holder.itemTV.setTextColor(Color.BLUE); 
    } 

    textAnimation = null; 
    return row; 
} 
+0

Спасибо kalyan. он работает как прелесть. :) – Bishan

0

я сделал это с помощью этого кода

мой основной класс

public class ListClass extends Activity { 
ListView listView; 
List<String> item = new ArrayList<String>(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.listclass); 

    item.add("A"); 
    item.add("B"); 
    item.add("C"); 
    item.add("D"); 
    item.add("E"); 
    item.add("F"); 
    item.add("G"); 

    listView = (ListView) findViewById(R.id.listView); 
    CustomArrayAdapter adapter = new CustomArrayAdapter(
      getApplicationContext(), R.layout.listitem, item); 
    listView.setAdapter(adapter); 

} 

}

адаптер

public class CustomArrayAdapter extends ArrayAdapter<String> { 

private Context context; 
private int layoutResourceId; 
private List<String> data = null; 

public CustomArrayAdapter(Context cont, int textViewResourceId, 
     List<String> horaNames) { 
    super(cont, textViewResourceId, horaNames); 

    this.layoutResourceId = textViewResourceId; 
    this.context = cont; 
    this.data = horaNames; 

} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    ItemHolder holder = null; 
    if (row == null) { 
     LayoutInflater inflater = LayoutInflater.from(context); 

     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new ItemHolder(); 
     holder.itemTV = (TextView) row.findViewById(R.id.textView1); 

     row.setTag(holder); 
    } else { 
     holder = (ItemHolder) row.getTag(); 
    } 

    // set list view background color 
    row.setBackgroundColor(Color.DKGRAY); 

    holder.itemTV.setText(data.get(position)); 

    Animation textAnimation = null; 

    if (data.get(position).equals("A")) { 
     holder.itemTV.setTextColor(Color.CYAN); 
    } else if (data.get(position).equals("B")) { 
     holder.itemTV.setTextColor(Color.GREEN); 
    } else if (data.get(position).equals("C")) { 
     holder.itemTV.setTextColor(Color.MAGENTA); 
    } else if (data.get(position).equals("D")) { 
     holder.itemTV.setTextColor(Color.RED); 
     textAnimation = new AlphaAnimation(0.0f, 1.0f); 
     textAnimation.setDuration(800); 
     textAnimation.setStartOffset(20); 
     textAnimation.setRepeatMode(Animation.REVERSE); 
     textAnimation.setRepeatCount(Animation.INFINITE); 
     holder.itemTV.startAnimation(textAnimation); 
    } else if (data.get(position).equals("E")) { 
     holder.itemTV.setTextColor(Color.WHITE); 
    } else if (data.get(position).equals("F")) { 
     holder.itemTV.setTextColor(Color.YELLOW); 
    } else if (data.get(position).equals("G")) { 
     holder.itemTV.setTextColor(Color.BLUE); 
    } 
    textAnimation = null; 
    return row; 
} 

static class ItemHolder { 
    TextView itemTV; 
} 

}

же, как ваш

и XML

<?xml version="1.0" encoding="utf-8"?> 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:textSize="20sp" 
    android:textStyle="bold" /> 

2 XML

<?xml version="1.0" encoding="utf-8"?> 

<ListView 
    android:id="@+id/listView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</ListView> 

и работал

1

Ofcource kalyan решил вашу проблему, но не смог понять, как вы получили эту проблему, поэтому я решил это. На самом деле, удалите эти строки кода

if (row == null) { 

и

} else { 
    holder = (ItemHolder) row.getTag(); 
} 

теперь ваш метод GetView является:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    View row = convertView; 
    ItemHolder holder = null; 

    LayoutInflater inflater = LayoutInflater.from(context); 

    row = inflater.inflate(layoutResourceId, parent, false); 

    holder = new ItemHolder(); 
    holder.itemTV = (TextView) row.findViewById(R.id.listItemTV); 

    row.setTag(holder); 

    // set list view background color 
    row.setBackgroundColor(Color.DKGRAY); 

    holder.itemTV.setText(data.get(position)); 

    Animation textAnimation = null; 

    if (data.get(position).equals("A")) { 
     holder.itemTV.setTextColor(Color.CYAN); 
    } else if (data.get(position).equals("B")) { 
     holder.itemTV.setTextColor(Color.GREEN); 
    } else if (data.get(position).equals("C")) { 
     holder.itemTV.setTextColor(Color.MAGENTA); 
    } else if (data.get(position).equals("D")) { 
     holder.itemTV.setTextColor(Color.RED); 
     textAnimation = new AlphaAnimation(0.0f, 1.0f); 
     textAnimation.setDuration(800); 
     textAnimation.setStartOffset(20); 
     textAnimation.setRepeatMode(Animation.REVERSE); 
     textAnimation.setRepeatCount(Animation.INFINITE); 
     holder.itemTV.startAnimation(textAnimation); 
     textAnimation = null; 
    } else if (data.get(position).equals("E")) { 
     holder.itemTV.setTextColor(Color.WHITE); 
    } else if (data.get(position).equals("F")) { 
     holder.itemTV.setTextColor(Color.YELLOW); 
    } else if (data.get(position).equals("G")) { 
     holder.itemTV.setTextColor(Color.BLUE); 
    } 
    textAnimation = null; 
    return row; 
} 
+0

Спасибо anand. высоко ценю вашу помощь :) – Bishan