Android-ViewPager自动滑动
来源:互联网 发布:手机淘宝年龄怎么看 编辑:程序博客网 时间:2024/05/20 16:12
Android-ViewPager的自动滑动
- 在Android-ViewPager循环滑动的基础上添加了自动滑动
- 添加了一个广播,用于滑动到下一张图片
- 添加了一个服务,用于向广播发送消息,表示该滑动图片了。。。
- 效果图
添加的服务代码如下
import android.app.Service;import android.content.Intent;import android.os.IBinder;public class ViewPagerSlideService extends Service{ private Intent intent; public static boolean isRun = true; @Override public void onCreate() { super.onCreate(); intent = new Intent("com.jz.viewpager.CHANGPAGERRECEIVER"); } @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { new Thread() { public void run() { while(isRun) {//每隔三秒向广播发送消息,滑动到下一张图片 try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } sendBroadcast(ViewPagerSlideService.this.intent); } }; }.start(); return super.onStartCommand(intent, flags, startId); }}
改变后的Activity代码如下
import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.ImageView;import android.widget.LinearLayout;public class MainActivity extends Activity { private ViewPager viewPager; private ImageView[] tips;// 小点 private ImageView[] imageViews;//显示的图片 private int[] imgIds;//图片的资源id private Intent intent;//启动服务的意图 private ChangePagerReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);//获取装小点的线性布局 viewPager = (ViewPager) findViewById(R.id.viewPager); // 图片资源 imgIds = new int[] { R.drawable.p20, R.drawable.p21, R.drawable.p22}; tips = new ImageView[imgIds.length]; for (int i = 0; i < tips.length; i++) { ImageView img = new ImageView(this); tips[i] = img; if (i == 0) { tips[i].setImageResource(R.drawable.yuanquan_up2); } else { tips[i].setImageResource(R.drawable.yuanquan_down2); } LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); params.width = 20;//小点宽度 params.height = 20;//小点高度 params.leftMargin = 5;//小点的左边margin距离 params.rightMargin = 5;//小点的右边margin距离 group.addView(img, params);//将小点添加到线性布局中 } //处理了,当图片小于等于4张的时候报的错 imageViews = imgIds.length <= 3 ? new ImageView[imgIds.length * 4] : new ImageView[imgIds.length]; for (int i = 0; i < imageViews.length; i++) { imageViews[i] = new ImageView(this); imageViews[i].setImageResource(imgIds[i % imgIds.length]); //按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽) //ImageView.ScaleType参考:http://blog.csdn.net/larryl2003/article/details/6919513 imageViews[i].setScaleType(ImageView.ScaleType.CENTER_CROP); } // 设置Adapter viewPager.setAdapter(new MyAdapter()); // 设置监听,主要是设置滑动时点点的图片的改变 viewPager.addOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { setImageBack(arg0 % imgIds.length); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { } @Override public void onPageScrollStateChanged(int arg0) { } }); // 设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动 viewPager.setCurrentItem((imageViews.length) * 100);
添加的部分:调用这个方法,启动服务并且添加广播
startServiceAndBroadcast();//启动服务来发送广播让ViewPager滑动 } /** * 启动服务创建广播 */ private void startServiceAndBroadcast() { ViewPagerSlideService.isRun = true;//线程可以运行 receiver = new ChangePagerReceiver();//实例化广播接收器 IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.jz.viewpager.CHANGPAGERRECEIVER"); registerReceiver(receiver, intentFilter);//添加广播的代码注册 intent = new Intent(MainActivity.this, ViewPagerSlideService.class); startService(intent);//启动服务 } /** * * 设置小点的背景 * */ private void setImageBack(int selectItem) { for (int i = 0; i < tips.length; i++) { if (i == selectItem) { tips[i].setImageResource(R.drawable.yuanquan_up2); } else { tips[i].setImageResource(R.drawable.yuanquan_down2); } } } /** * * ViewPager适配器 * */ public class MyAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(imageViews[position % imageViews.length]); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(imageViews[position % imageViews.length], 0); return imageViews[position % imageViews.length]; } }
添加的部分:添加的广播接收器,用于切换到下一张图片
/** * * 接收广播让ViewPager动态改变 * */ public class ChangePagerReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int position = viewPager.getCurrentItem(); viewPager.setCurrentItem(position + 1, true); } }
添加的部分:当页面被销毁时
@Override protected void onDestroy() { super.onDestroy(); ViewPagerSlideService.isRun = false; stopService(intent); unregisterReceiver(receiver); }}
我的感受
- 常常有自动滑动的ViewPager,自己就想着添加一个
- 也可以直接在Activity中添加一个线程来控制滑动,这样来的还挺方便快捷的(@ ̄ー ̄@),感觉我好像想多了给弄麻烦了。。。
想说的话
- 博客坚持写,今后学习了新的东西就在这里记录一下,以便今后回顾,也希望小小笔记能帮助你们
- 若内容有什么地方不对、不清楚,还望吐槽,希望大家能一起成长
- 来一个:枯燥无味中寻找成功的快感
0 0
- Android-ViewPager自动滑动
- Android---ViewPager循环滑动+自动滑动
- Android ViewPager循环左右自动滑动加载Page
- android中ViewPager图片滑动和自动播放
- Android ViewPager 无限循环左右滑动(可自动) 实现
- ViewPager自动无限循环滑动
- 无限自动滑动的ViewPager
- ViewPager的自动循环滑动
- android viewpager 滑动监听
- android 禁止ViewPager滑动
- Android 循环滑动viewpager
- android ViewPager滑动事件
- Android-ViewPager循环滑动
- Android 禁止ViewPager滑动
- android ViewPager滑动事件
- Android-ViewPager滑动图片
- Android-ViewPager滑动导航
- Android ViewPager 监听滑动
- PAT1012
- 易错、易望、基础、重要知识点 ——java语言的基本常识
- 易错、易望、基础、重要知识点——java中最常用的两种排序方式
- libz.so.1: cannot open shared object file
- 易错、易望、基础、重要知识点 ——API常用类1——StringBuffer/StringBuilder
- Android-ViewPager自动滑动
- Scala基础教程--3控制结构与函数
- Hessian Matrix
- UVALive 6921Refraction(二分)
- 利用treegrid的loadFilter显示列的子属性
- Robust Quasistatic Finite Elements and Flesh Simulation
- Linux_正则表达式
- 别忘记通过Xsolla PayStation 3.0设置游戏促销活动
- Automotive Engineering Journal Ranking