搜索
热搜: 活动 交友 discuz
查看: 3014|回复: 0
打印 上一主题 下一主题

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

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2018-12-1 14:11:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
项目地址:https://github.com/gongwen/MarqueeViewLibrary

主要功能:

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

效果图:


使用方法:


  1. Gradle:
  2. implementation 'com.gongwen:marqueelibrary:1.1.3'
复制代码
  1. <com.gongwen.marqueen.SimpleMarqueeView
  2.     android:id="@+id/simpleMarqueeView"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="40dp"
  5.     android:flipInterval="2500"
  6.     android:inAnimation="@anim/in_right"
  7.     android:outAnimation="@anim/out_left"
  8.     app:marqueeAnimDuration="2000"
  9.     app:smvTextColor="@color/white"
  10.     app:smvTextEllipsize="end"
  11.     app:smvTextGravity="center_vertical"
  12.     app:smvTextSingleLine="true"
  13.     app:smvTextSize="15sp" />
复制代码



设置数据


  1. final List<String> datas = Arrays.asList("《赋得古原草送别》", "离离原上草,一岁一枯荣。", "野火烧不尽,春风吹又生。", "远芳侵古道,晴翠接荒城。", "又送王孙去,萋萋满别情。");
  2. //SimpleMarqueeView<T>,SimpleMF<T>:泛型 T 指定其填充的数据类型,比如 String,Spanned 等
  3. SimpleMarqueeView<String> marqueeView = (SimpleMarqueeView) findViewById(R.id.marqueeView);
  4. SimpleMF<String> marqueeFactory = new SimpleMF(this);
  5. marqueeFactory.setData(datas);
  6. marqueeView.setMarqueeFactory(marqueeFactory);
  7. marqueeView.startFlipping();
复制代码


设置监听:

  1. marqueeView.setOnItemClickListener(new OnItemClickListener<TextView, String>() {
  2.     @Override
  3.     public void onItemClickListener(TextView mView, String mData, int mPosition) {
  4.         /**
  5.         * 注意:
  6.         * 当 MarqueeView 有子 View 时,mView:当前显示的子 View,mData:mView 所填充的数据,mPosition:mView 的索引
  7.         * 当 MarqueeView 无子 View 时,mView:null,mData:null,mPosition:-1
  8.         */
  9.         Toast.makeText(MainActivity.this, String.format("mPosition:%s,mData:%s,mView:%s,.", mPosition, mData, mView), Toast.LENGTH_SHORT).show();
  10.     }
  11. });
复制代码


扩展用法:自定义 MarqueeFactory 来定制任意类型 ItemViewXML

  1. <com.gongwen.marqueen.MarqueeView
  2.     android:id="@+id/marqueeView"
  3.     android:layout_width="match_parent"
  4.     android:layout_height="40dp"
  5.     android:flipInterval="2500"
  6.     android:inAnimation="@anim/in_right"
  7.     android:outAnimation="@anim/out_left"
  8.     app:marqueeAnimDuration="2000"></com.gongwen.marqueen.MarqueeView>
复制代码


自定义 MarqueeFactory
继承自 MarqueeFactory,通过泛型指定 ItemView 类型以及 ItemData 类型,之后实现 generateMarqueeItemView 方法,提供 ItemView,并为 ItemView 设置数据即可。

例如:


  1. /MarqueeFactory<T extends View, E>
  2. //泛型 T:指定 ItemView 的类型
  3. //泛型 E:指定 ItemView 填充的数据类型
  4. public class ComplexViewMF extends MarqueeFactory<RelativeLayout, ComplexItemEntity> {
  5.     private LayoutInflater inflater;

  6.     public ComplexViewMF(Context mContext) {
  7.         super(mContext);
  8.         inflater = LayoutInflater.from(mContext);
  9.     }

  10.     @Override
  11.     public RelativeLayout generateMarqueeItemView(ComplexItemEntity data) {
  12.         RelativeLayout mView = (RelativeLayout) inflater.inflate(R.layout.complex_view, null);
  13.         ((TextView) mView.findViewById(R.id.title)).setText(data.getTitle());
  14.         ((TextView) mView.findViewById(R.id.secondTitle)).setText(data.getSecondTitle());
  15.         ((TextView) mView.findViewById(R.id.time)).setText(data.getTime());
  16.         return mView;
  17.     }
  18. }
复制代码
设置数据和监听事件用法同上重影问题可参考以下解决方案(参考自这里)

  1. @Override
  2. public void onStart() {
  3.     super.onStart();
  4.     marqueeView.startFlipping();
  5. }

  6. @Override
  7. public void onStop() {
  8.     super.onStop();
  9.     marqueeView.stopFlipping();
  10. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-5-6 10:20 , Processed in 0.057029 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表