安卓论坛
标题:
android 幻灯片控件,仿造网页各种滚动效果
[打印本页]
作者:
admin
时间:
2018-12-1 14:11
标题:
android 幻灯片控件,仿造网页各种滚动效果
项目地址:
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 来定制任意类型 ItemView
XML
<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();
}
复制代码
欢迎光临 安卓论坛 (http://android.hh85.com/)
Powered by Discuz! X3.2