|
项目地址:https://github.com/gongwen/MarqueeViewLibrary
主要功能:
一个很方便使用和扩展的跑马灯 Library,通过提供不同的 MarqueeFactory 来定制不同的跑马灯 View, 并且提供了常用类型的跑马灯效果
效果图:
使用方法:
- Gradle:
- implementation 'com.gongwen:marqueelibrary:1.1.3'
复制代码- <com.gongwen.marqueen.SimpleMarqueeView
- android:id="@+id/simpleMarqueeView"
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:flipInterval="2500"
- android:inAnimation="@anim/in_right"
- android:outAnimation="@anim/out_left"
- app:marqueeAnimDuration="2000"
- app:smvTextColor="@color/white"
- app:smvTextEllipsize="end"
- app:smvTextGravity="center_vertical"
- app:smvTextSingleLine="true"
- app:smvTextSize="15sp" />
复制代码
设置数据
- final List<String> datas = Arrays.asList("《赋得古原草送别》", "离离原上草,一岁一枯荣。", "野火烧不尽,春风吹又生。", "远芳侵古道,晴翠接荒城。", "又送王孙去,萋萋满别情。");
- //SimpleMarqueeView<T>,SimpleMF<T>:泛型 T 指定其填充的数据类型,比如 String,Spanned 等
- SimpleMarqueeView<String> marqueeView = (SimpleMarqueeView) findViewById(R.id.marqueeView);
- SimpleMF<String> marqueeFactory = new SimpleMF(this);
- marqueeFactory.setData(datas);
- marqueeView.setMarqueeFactory(marqueeFactory);
- marqueeView.startFlipping();
复制代码
设置监听:
- marqueeView.setOnItemClickListener(new OnItemClickListener<TextView, String>() {
- @Override
- public void onItemClickListener(TextView mView, String mData, int mPosition) {
- /**
- * 注意:
- * 当 MarqueeView 有子 View 时,mView:当前显示的子 View,mData:mView 所填充的数据,mPosition:mView 的索引
- * 当 MarqueeView 无子 View 时,mView:null,mData:null,mPosition:-1
- */
- Toast.makeText(MainActivity.this, String.format("mPosition:%s,mData:%s,mView:%s,.", mPosition, mData, mView), Toast.LENGTH_SHORT).show();
- }
- });
复制代码
扩展用法:自定义 MarqueeFactory 来定制任意类型 ItemViewXML
- <com.gongwen.marqueen.MarqueeView
- android:id="@+id/marqueeView"
- android:layout_width="match_parent"
- android:layout_height="40dp"
- android:flipInterval="2500"
- android:inAnimation="@anim/in_right"
- android:outAnimation="@anim/out_left"
- app:marqueeAnimDuration="2000"></com.gongwen.marqueen.MarqueeView>
复制代码
自定义 MarqueeFactory
继承自 MarqueeFactory,通过泛型指定 ItemView 类型以及 ItemData 类型,之后实现 generateMarqueeItemView 方法,提供 ItemView,并为 ItemView 设置数据即可。
例如:
- /MarqueeFactory<T extends View, E>
- //泛型 T:指定 ItemView 的类型
- //泛型 E:指定 ItemView 填充的数据类型
- public class ComplexViewMF extends MarqueeFactory<RelativeLayout, ComplexItemEntity> {
- private LayoutInflater inflater;
- public ComplexViewMF(Context mContext) {
- super(mContext);
- inflater = LayoutInflater.from(mContext);
- }
- @Override
- public RelativeLayout generateMarqueeItemView(ComplexItemEntity data) {
- RelativeLayout mView = (RelativeLayout) inflater.inflate(R.layout.complex_view, null);
- ((TextView) mView.findViewById(R.id.title)).setText(data.getTitle());
- ((TextView) mView.findViewById(R.id.secondTitle)).setText(data.getSecondTitle());
- ((TextView) mView.findViewById(R.id.time)).setText(data.getTime());
- return mView;
- }
- }
复制代码 设置数据和监听事件用法同上重影问题可参考以下解决方案(参考自这里)
- @Override
- public void onStart() {
- super.onStart();
- marqueeView.startFlipping();
- }
- @Override
- public void onStop() {
- super.onStop();
- marqueeView.stopFlipping();
- }
复制代码
|
|