0

I need to animate textview with text D. but when i run programe, it animates both textview with text A and textview with text D. textview with text A is the first textview in the list.

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;
}

How can i solve this ? i need to animate the textview with text D only.

UPDATED

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

Bishan
  • 15,211
  • 52
  • 164
  • 258

3 Answers3

1

Change your getView() method like this then it work..

@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;
}

this is also works..i think this one is better..

@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;
}
kalyan pvs
  • 14,486
  • 4
  • 41
  • 59
1

Ofcource kalyan solved your problem but he unable know how you were getting that problem so i solved that. Actually, delete this lines of code

if (row == null) {

and

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

now your getView method is:

@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;
}
anand
  • 416
  • 2
  • 11
0

i done it using this code

my main class

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);

}

}

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;
}

}

same as yours

and 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" />

2nd xml

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

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

and it worked

Meenal
  • 2,879
  • 5
  • 19
  • 43