Android TextView动画问题

时间:2013-11-07 09:33:27

标签: android animation android-listview textview android-4.4-kitkat

我需要使用文字 D textview设置动画。但是当我运行程序时,它会使用文本 A textview文本 D textview设置动画。文字 A textview是列表中的第一个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;
}

我该如何解决这个问题?我需要使用文字 D textview设置动画。

已更新

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

3 个答案:

答案 0 :(得分: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;
}

这也是有效的......我认为这个更好......

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

答案 1 :(得分: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;
}

答案 2 :(得分: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" />

第二个xml

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

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

并且有效