0

我需要textview用文字D制作动画。但是当我运行程序时,它会同时textview使用文本Atextview文本D进行动画处理。textview文本Atextview列表中的第一个。

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>

完成项目下载

链接 2

4

3 回答 3

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;
}
于 2013-11-07T10:29:31.357 回答
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;
}
于 2013-11-07T10:49:27.123 回答
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>

它奏效了

于 2013-11-07T10:27:04.553 回答