https://bintray.com/xujun94/maven/marqueeView
implementation ‘com.xj:marqueeview:0.1.20’
- 第二步:在 XML 文件中使用
<com.xj.marqueeview.MarqueeView android:id="@+id/mv_multi_text5" android:layout_width=“match_parent” android:layout_height="@dimen/mv_multi_text_height" android:layout_marginTop=“10dp” android:background="@mipmap/bg" app:mvAnimDuration=“500” app:mvDirection=“top_to_bottom” app:mvInterval=“3000”></com.xj.marqueeview.MarqueeView>
自定义属性说明
- 第三步:给 MarqueeView 设置 Adapater
首先,若 MarqueeView 的 ViewType 只有一种类型,那么只需要继承 CommonAdapter 即可
public class SimpleTextAdapter extends CommonAdapter { public SimpleTextAdapter(Context context, List datas) { super(context, R.layout.item_simple_text, datas); } @Override protected void convert(ViewHolder viewHolder, String item, int position) { TextView tv = viewHolder.getView(R.id.tv); tv.setText(item); } }SimpleTextAdapter simpleTextAdapter = new SimpleTextAdapter(mContext, datas);simpleTextAdapter.setOnItemClickListener(new MultiItemTypeAdapter.OnItemClickListener() { @Override public void onItemClick(int position, View view) { Log.i(TAG, "onItemClick: position = " + position); if (marqueeView.isStart()) { marqueeView.stopFilp(); } else { marqueeView.startFlip(); } }});marqueeView.setAdapter(simpleTextAdapter);
看一下效果图:
- 支持不同的 ViewType
从 gif 效果图中,我们可以看到,一共有三种 type:
-
只含有 TextView
-
含有一个 ImageView 和 TextView
-
含有两个 TextView 和 一个ImageView
要想实现上述效果,需要两个步骤:
第一步:继承于 ItemViewDelegate,重写 getItemViewLayoutId,isForViewType,convert方法,其中 getItemViewLayoutId 方法表示返回布局 layoutId,convert 方法在刷新当前 View 的时候会调用,可以用来刷新数据
/**
- Created by xujun on 1/9/2018$ 18:25$.
*/
public class TextItemViewDelegate implements ItemViewDelegate {
@Override
public int getItemViewLayoutId() {
return R.layout.item_simple_text;
}
@Override
public boolean isForViewType(MultiTypeBean item, int position) {
return item.mItemViewType == MultiTypeBean.ItemViewType.text;
}
@Override
public void convert(ViewHolder holder, MultiTypeBean multiTypeBean, int position) {
TextView tv = holder.getView(R.id.tv);
tv.setText(multi