用viewpager实现图片轮播
应用中常常遇到图片轮播的需求,这时候就需要用到viewpager这个组件。viewpager是android support v4 中提供的一个组件。viewpager使用需要以下几步骤:
1.在布局文件中添加viewpager组件
<android.support.v4.view.ViewPager
android:id="@+id/vp_adv"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
ViewPager路径要写完整,否则会出现问题;
2.创建PagerAdapter,PagerAdapter是viewPager的内容提供者,这里我们的图片就是由PagerAdapter提供给viewpager展示的。同样PagerAdapter也在support v4包中。具体如下所示:
public class AdvertisingAdapter extends PagerAdapter {
private List<View> mList;
public AdvertisingAdapter() {
mList = new ArrayList<View>();
}
public void setData(List<View> list) {
if (list != null) {
mList.clear();
mList.addAll(list);
notifyDataSetChanged();
}
}
@Override
public int getCount() {
return mList.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return object == view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(mList.get(position));
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(mList.get(position), 0);
return mList.get(position);
}
}
3.初始化ViewPager,PagerAdapter
protected void setupView() {
mPagerAdapter = new AdvertisingAdapter();
mViewPager = (ViewPager) findViewById(R.id.vp_adv);
mViewPager .setAdapter(mPagerAdapter );
mAdvertising.addOnPageChangeListener(this);
}
待PagerAdapter填充图片数据后,ViewPager便可以将图片展示出来。
4.添加“.”。基本所有应用使用到ViewPager都会使用“.”标识当前坐标,即展示到哪一页。如下代码添加点号:
添加布局文件
<LinearLayout
android:id="@+id/viewGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="20dp"
android:layout_marginRight="20dp"
android:orientation="horizontal"></LinearLayout>
在布局里面动态添加“点”的view
imageViews = new ImageView[advPics.size()];
ImageView imageView;
for (int i = 0; i < advPics.size(); i++) {
imageView = new ImageView(this);
imageView.setLayoutParams(new LinearLayout.LayoutParams(50, 50));
imageView.setPadding(15, 15, 15, 15);
imageViews[i] = imageView;
if (i == 0) {
imageViews[i].setImageResource(R.drawable.dot_focus);
} else {
imageViews[i].setImageResource(R.drawable.dot_blur);
}
llDot.addView(imageViews[i]);
}
拖动ViewPager时,坐标点动态改变
@Override
public void onPageSelected(int position) {
LogUtils.d("enter onPageSelected method"); for (int i = 0; i < advPics.size(); i++) {
imageViews[position].setImageResource(R.drawable.dot_focus);
if (position != i) {
imageViews[i].setImageResource(R.drawable.dot_blur);
}
}
}
5.自动轮播。大多数时候,我们展示图片时需要其自动轮播的。
启动线程,控制轮播时间,及发出轮播请求给UI线程
private void initAutoThread() {
Runnable runnable = new Runnable() {
@Override
public void run() {
while (true) {
if (!isPlayPaused.get()) {
sendUiMessage(MSG_UI_CHANGE_ADV_PIC, what.get(), 0, null);
what.incrementAndGet();
if (what.get() > advPics.size() - 1) {
what.getAndAdd(-advPics.size());
}
}
if (needExit.get()) {
break;
}
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.setName("Carousel");
thread.start();
}
UI 线程收到请求后,对显示的图片进行更改
mViewPager.setCurrentItem(msg.arg1);
用viewpager实现图片轮播的更多相关文章
- 通过ViewPager 实现图片轮播
通过ViewPager 实现图片轮播 首先来个效果图 布局文件: LinearLayout 用来存放下方的几个小白点. <?xml version="1.0" encodin ...
- Viewpager实现图片轮播
//-------------主布局文件------------------------------------- <LinearLayout xmlns:android="http: ...
- Android ViewPager PagerAdapter 图片轮播
ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的View类. ViewPager类需要一个PagerAdapter适配器类给它提供数据. ViewPager ...
- Android Viewpager实现图片轮播(仿优酷效果)
1 http://blog.csdn.net/t12x3456/article/details/8160128 2 http://www.cnblogs.com/androidez/archive/2 ...
- Android 使用ViewPager 做的半吊子的图片轮播
Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...
- 使用FlaycoBanner实现图片轮播效果(加载网络图片)
FlaycoBanner是一个开源图片轮播框架,支持android2.2及以上: git地址:https://github.com/H07000223/FlycoBanner_Master 在andr ...
- Android 图片轮播(最简单的)
布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...
- Android学习笔记之图片轮播...
PS:一个bug又折腾了一个下午....哎... 学习内容: 1.Android利用ViewPager和PagerAdapter实现图片轮播... 2.使用反射机制获取Android的资源信息... ...
- Android中使用开源框架android-image-indicator实现图片轮播部署
之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页 ...
随机推荐
- cocos2d-x 二进制文件的读写
转自:http://blog.csdn.net/wolfking_2009/article/details/10616069 cocos2d-x里面的二进制文件读取的方法是有的,作者对方法封装了下,将 ...
- vs 设置生成的实体为复数
- [Java] 识别图片验证码
现在大多数网站都采用了验证码来防止暴力破解或恶意提交.但验证码真的就很安全吗?真的就不能被机器识别?? 我先讲讲我是怎么实现站外提交留言到一个网站的程序. 这个网站的留言版大致如下: 我一看这种简单的 ...
- CSDN蒋涛:我为什么和王峰一起创办极客帮天使基金?
i 黑马 记者:王静静 7月15日,i黑马在一家咖啡厅见到了CSDN创始人蒋涛,这位中国最大的程序猿社区的创始人,正在经营一份新事业,他和蓝港在线创始人王峰正式成立了天使基金"极客 ...
- Linux用户空间与内核空间(理解高端内存)
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数 ...
- java字符串分解 StringTokenizer用法(比split()方法效率高)
Java中substring方法可以分解字符串,返回的是原字符串的一个子字符串.如果要讲一个字符串分解为一个一个的单词或者标记,StringTokenizer可以帮你. int countTokens ...
- Preventing CSRF in Java web apps---reference
reference from:http://ricardozuasti.com/2012/preventing-csrf-in-java-web-apps/ Cross-site request fo ...
- 给学习IT、编程者的看
Preface: 我始终认为,对一个初学者来说,IT界的技术风潮...... Content: 我始终认为,对一个初学者来说,IT界的技术风潮是不可以追赶的,而且也没有能力去追赶.我时常看见自己的DD ...
- kafka的一些名词
broker.id 区kafka集群中每台机器的标识 log.dirs 日志的存放目录,这个最好不要放到/tmp目录下,因为kafka的已被消费和未被消费的数据也被当成“日志”存放到了日志目录,: l ...
- IIS 之 HTTP Error 404.2 – Not Found(ISAPI 和 CGI 限制)
对于很多B/S架构的软件来说,在IIS中添加ISAPI和CGI限制功能是非常必要的,因为如果在IIS中不添加添加ISAPI和CGI限制功能可能会引起软件运行过程中报错,或者直接就登录不了. 1.允许I ...