admin 发表于 2018-12-1 14:11:18

android 幻灯片控件,仿造网页各种滚动效果

项目地址:https://github.com/gongwen/MarqueeViewLibrary

主要功能:

一个很方便使用和扩展的跑马灯 Library,通过提供不同的 MarqueeFactory 来定制不同的跑马灯 View, 并且提供了常用类型的跑马灯效果

效果图:

https://raw.githubusercontent.com/gongwen/MarqueeViewLibrary/master/screenshot/screen_shot.gif
使用方法:


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();
}

页: [1]
查看完整版本: android 幻灯片控件,仿造网页各种滚动效果