recyclerview 跑马灯
时间: 2023-09-28 15:03:49 浏览: 49
要实现 RecyclerView 跑马灯效果,可以通过以下步骤:
1. 在 RecyclerView 的 Adapter 中,重写 getItemViewType() 方法,返回一个用于显示跑马灯的 view type,以及一个普通的 view type。
2. 在 onCreateViewHolder() 方法中,根据 view type 创建不同的 ViewHolder。
3. 在跑马灯的 ViewHolder 中,通过使用 TextView 的 setMarqueeRepeatLimit() 和 setSelected() 方法,实现文字的跑马灯效果。
4. 在 onBindViewHolder() 方法中,根据 view type 绑定不同的数据。
5. 在 onBindViewHolder() 方法中,对于跑马灯的 ViewHolder,需要将 TextView 的 setSelected() 方法设置为 true,启动跑马灯效果。
具体实现可以参考以下代码:
```
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private static final int TYPE_MARQUEE = 1;
private static final int TYPE_NORMAL = 2;
private List<String> mData;
public MyAdapter(List<String> data) {
mData = data;
}
@Override
public int getItemViewType(int position) {
if (position == 0) {
return TYPE_MARQUEE;
} else {
return TYPE_NORMAL;
}
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == TYPE_MARQUEE) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_marquee, parent, false);
return new MarqueeViewHolder(view);
} else {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_normal, parent, false);
return new NormalViewHolder(view);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
if (holder instanceof MarqueeViewHolder) {
((MarqueeViewHolder) holder).bindData(mData.get(position));
((MarqueeViewHolder) holder).startMarquee();
} else if (holder instanceof NormalViewHolder) {
((NormalViewHolder) holder).bindData(mData.get(position));
}
}
@Override
public int getItemCount() {
return mData.size();
}
static class MarqueeViewHolder extends RecyclerView.ViewHolder {
private TextView mTextView;
public MarqueeViewHolder(@NonNull View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.text_view);
}
public void bindData(String data) {
mTextView.setText(data);
}
public void startMarquee() {
mTextView.setSelected(true);
mTextView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
mTextView.setMarqueeRepeatLimit(-1);
}
}
static class NormalViewHolder extends RecyclerView.ViewHolder {
private TextView mTextView;
public NormalViewHolder(@NonNull View itemView) {
super(itemView);
mTextView = itemView.findViewById(R.id.text_view);
}
public void bindData(String data) {
mTextView.setText(data);
}
}
}
```
阅读全文