今天我们来实现一个简单的效果,通知消息无限循环播放,先看效果图:
这个效果也很常见,实现的方法也有很多,我是使用RecyclerView来实现的,觉得还是挺不错的,就写下来分享给大家。
下面先看我们的布局文件main.xml,里面主要是一个RecyclerView:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v7.widget.RecyclerView android:id="@+id/myRecyclerView" android:layout_width="match_parent" android:layout_height="36dp" android:layout_marginTop="20dp" android:background="#faf7bb" > </android.support.v7.widget.RecyclerView> </LinearLayout>
接下来看一下MainActivity的代码:
public class MainActivity extends Activity {
@BindView(R.id.myRecyclerView)RecyclerView myRecyclerView;
private List<String> mDatas;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ButterKnife.bind(this);
initData();
initView();
}
private void initData(){
mDatas = new ArrayList<>();
mDatas.add("我被青春撞了一下腰");
mDatas.add("爱就一个字,我只说一次");
mDatas.add("你在他乡还好吗");
}
private void initView(){
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false);
myRecyclerView.setLayoutManager(linearLayoutManager);
myRecyclerView.setAdapter(new MyAdapter());
handler.sendEmptyMessageDelayed(0x00,1000);
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
myRecyclerView.scrollBy(myRecyclerView.getScrollX()+2,myRecyclerView.getScrollY());
handler.sendEmptyMessageDelayed(0x00,100);
}
};
}
再看一下Adapter:
class MyAdapter extends RecyclerView.Adapter<MyViewHolder>{
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_recyclerview,parent,false));
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
final int tempPos = position%(mDatas.size());
holder.textView.setText(mDatas.get(tempPos));
holder.textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast toast = Toast.makeText(MainActivity.this,mDatas.get(tempPos),Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
}
});
}
@Override
public int getItemCount() {
return 100000;
}
}
class MyViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public MyViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.tv_recyclerview);
}
}
首先,创建一个List,存放播放的数据,然后设置RecyclerView,
我们看一下MyAdapter,在getItemCount()方法里,我们返回的次数是100000,目的就是为了让数据大一点,看似达到了无限播放的效果,毕竟用户在一个界面的停留时间是有限的,这个根据具体业务场景,还可以适当调整。在看一下MainActivity的initView方法,设置好了RecyclerView之后,使用handler发送一个空消息,到达handler的handleMessage方法,这个方法的处理,就是我们的核心了,
myRecyclerView.scrollBy(myRecyclerView.getScrollX()+2,myRecyclerView.getScrollY());
使用scroolBy,每隔100毫秒发送一次消息,每次scrollX增加2个像素位移,即可达到无限循环滚动的效果,好神奇。到此我们的功能就实现了。
下面做两个优化:
1.第一个优化,
当页面有跳转时,禁止消息滚动,即暂停,当页面回来的时候再接着滚动。
我们定义一个boolean类型的变量,在onStop和onRestart方法里分别赋值,
private boolean flag;
@Override
protected void onRestart() {
flag = false;
handler.sendEmptyMessageDelayed(0x00,100);
super.onRestart();
}
@Override
protected void onStop() {
flag = true;
super.onStop();
}
接着,handler的handlerMessage方法稍微也改一下:
@Override
public void handleMessage(Message msg) {
myRecyclerView.scrollBy(myRecyclerView.getScrollX() + 2, myRecyclerView.getScrollY());
if (!flag) {
handler.sendEmptyMessageDelayed(0x00, 100);
}
}
这样,在页面进行切换时,消息不再滚动了。
2.第二个优化,
禁止手动滚动消息,最上面那个效果图,可以看出,我们可以用手滚动消息,如果不想让用户用手滚动,则禁止响应move事件即可,由我们的布局文件可知,RecyclerView的父布局是LinearLayout,我们可以自定义LinearLayout,拦截掉move事件即可,代码如下:
public class ForbidMoveLinearLayout extends LinearLayout {
public ForbidMoveLinearLayout(Context context) {
super(context);
}
public ForbidMoveLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ForbidMoveLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_MOVE){
return true;
}
return super.onInterceptTouchEvent(ev);
}
}
我们的布局文件进行相应调整:
<?xml version="1.0" encoding="utf-8"?> <com.example.administrator.helloapplication.ForbidMoveLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v7.widget.RecyclerView android:id="@+id/myRecyclerView" android:layout_width="match_parent" android:layout_height="36dp" android:layout_marginTop="20dp" android:background="#faf7bb" > </android.support.v7.widget.RecyclerView> </com.example.administrator.helloapplication.ForbidMoveLinearLayout>
这样就禁止手动滑动了,效果图就不贴了,可以自己试一下。看起来也不是那么难,但是如果想不到这个思路,就不好下手了。
Ok,到此结束。
总结
以上所述是小编给大家介绍的Android 实现通知消息水平播放、无限循环效果,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
# android
# 通知消息水平播放
# 无限循环
# Android ViewPager循环播放广告实例详解
# Android编程实现VideoView循环播放功能的方法
# Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigur
# Android ViewPager实现Banner循环播放
# Android 使用ViewPager实现图片左右循环滑动自动播放
# Android实现图片循环播放的实例方法
# 看一下
# 我们可以
# 用手
# 给大家
# 到此
# 来实现
# 小编
# 先看
# 是一个
# 我是
# 也有
# 好了
# 还可以
# 第一个
# 就不
# 你在
# 也很
# 达到了
# 第二个
# 自定义
相关文章:
如何设置并定期更换建站之星安全管理员密码?
如何选择高性价比服务器搭建个人网站?
如何挑选高效建站主机与优质域名?
Android使用GridView实现日历的简单功能
广州营销型建站服务商推荐:技术优势与SEO优化解析
实现点击下箭头变上箭头来回切换的两种方法【推荐】
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
php json中文编码为null的解决办法
如何快速使用云服务器搭建个人网站?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何零成本快速生成个人自助网站?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
如何在橙子建站上传落地页?操作指南详解
如何访问已购建站主机并解决登录问题?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
建站org新手必看:2024最新搭建流程与模板选择技巧
太原网站制作公司有哪些,网约车营运证查询官网?
c# 服务器GC和工作站GC的区别和设置
如何快速搭建高效服务器建站系统?
音响网站制作视频教程,隆霸音响官方网站?
建站之星导航配置指南:自助建站与SEO优化全解析
定制建站策划方案_专业建站与网站建设方案一站式指南
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
如何在阿里云购买域名并搭建网站?
h5在线制作网站电脑版下载,h5网页制作软件?
专业公司网站制作公司,用什么语言做企业网站比较好?
制作网站的软件免费下载,免费制作app哪个平台好?
宝塔新建站点为何无法访问?如何排查?
建站之星导航菜单设置与功能模块配置全攻略
常州企业网站制作公司,全国继续教育网怎么登录?
公司网站制作价格怎么算,公司办个官网需要多少钱?
家具网站制作软件,家具厂怎么跑业务?
网站企业制作流程,用什么语言做企业网站比较好?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
定制建站流程解析:需求评估与SEO优化功能开发指南
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何获取开源自助建站系统免费下载链接?
如何在万网主机上快速搭建网站?
再谈Python中的字符串与字符编码(推荐)
如何快速搭建高效WAP手机网站吸引移动用户?
如何通过智能用户系统一键生成高效建站方案?
网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?
建站之星免费模板:自助建站系统与智能响应式一键生成
Python多线程使用规范_线程安全解析【教程】
网站app免费制作软件,能免费看各大网站视频的手机app?
如何在IIS服务器上快速部署高效网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。