ViewPager的广告条轮播
首先布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
> <android.support.v4.view.ViewPager
android:id="@+id/viewpagerAD"
android:layout_width="match_parent"
android:layout_height="160dp"
/> <LinearLayout
android:id="@+id/dot_layout"
android:layout_width="match_parent"
android:layout_height="30dp"
android:layout_marginTop="130dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:background="#66000000" > <View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" /> <ImageView
android:id="@+id/dot1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@mipmap/dot_enable" /> <ImageView
android:id="@+id/dot2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@mipmap/dot_normal"
android:layout_marginLeft="20dp" /> <ImageView
android:id="@+id/dot3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@mipmap/dot_normal"
android:layout_marginLeft="20dp" /> <View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</RelativeLayout> 代码一:使用Handler递归实现
public class MainActivity extends AppCompatActivity {
private ViewPager mViewPager;
private List<ImageView> mADViews;
private static final int[] AD_RES = {R.mipmap.a, R.mipmap.b, R.mipmap.c};
private ADAdapter mADAdapter;
private List<ImageView> mDotViews;
//2-2 通过Handler+postdelayed递归
private Handler mAdHandler = new Handler() {
@Override
public void close() {
}
@Override
public void flush() {
}
@Override
public void publish(LogRecord record) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mADViews = new ArrayList<ImageView>();
for (int i = 0; i < AD_RES.length; i++) {
//通过代码创建ImageView
ImageView imageView = new ImageView(this);
imageView.setLayoutParams(new LinearLayout.LayoutParams(ViewPager.LayoutParams.MATCH_PARENT, ViewPager.LayoutParams.MATCH_PARENT));
//设置图片拉伸方式
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
//给图片指定资源
imageView.setImageResource(AD_RES[i]);
mADViews.add(imageView);
}
mViewPager = (ViewPager) findViewById(R.id.viewpagerAD);
//绑定适配器
mADAdapter = new ADAdapter(mADViews);
mViewPager.setAdapter(mADAdapter);
// 通过Handler+postdelayed递归
mViewPager.postDelayed(new ADRunnable(), 2000);
//先把所有圆点放入数组
mDotViews = new ArrayList<ImageView>();
mDotViews.add((ImageView) findViewById(R.id.dot1));
mDotViews.add((ImageView) findViewById(R.id.dot2));
mDotViews.add((ImageView) findViewById(R.id.dot3));
//ViewPager的滑动监听
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// 滑动状态改变的时候触发,参数表示当前显示的位置
for (int i = 0; i < mDotViews.size(); i++) {
if (i != position) {
mDotViews.get(i).setImageResource(R.mipmap.dot_normal);
} else {
mDotViews.get(i).setImageResource(R.mipmap.dot_enable);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
//2-1 定义循环执行的任务:就是让当前下标++,调用setCurrentItem()
class ADRunnable implements Runnable {
@Override
public void run() {
//获得当前显示item的下标
int nowIndex = mViewPager.getCurrentItem();
//下标自增
nowIndex++;
if (nowIndex > mADViews.size() - 1) {
nowIndex = 0;
}
//重新设置显示的位置
mViewPager.setCurrentItem(nowIndex);
//递归
mViewPager.postDelayed(new ADRunnable(), 2000);
}
}
}
/**
* 1-3 自定义的PagerAdapter
* @author Bodhixu
*
*/
public class ADAdapter extends PagerAdapter{ //数据源
private List<ImageView> mViews; public ADAdapter(List<ImageView> views) {
this.mViews = views;
} @Override
public int getCount() {
// TODO Auto-generated method stub
return mViews.size();
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
} @Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
View view = mViews.get(position);
container.addView(view);
return view;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView(mViews.get(position));
} }
代码二:使用Timer来实现(防止越来越快)
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast; import com.gtercn.oneday.R;
import com.gtercn.oneday.base.BaseFragment;
import com.gtercn.oneday.bean.ImageBean; import java.util.ArrayList;
import java.util.List; public class HomeFragment extends BaseFragment implements ViewPager.OnPageChangeListener{
private static final String TAG = HomeFragment.class.getSimpleName(); private ViewPager mViewPager; private ViewPagerAdapter mViewPagerAdapter; private LinearLayout mWrapDots;
private List<ImageBean> mImageList;
private ImageView[] mDots;
private ImageView mImageView;
private int currentIndex;
private Thread mThread;
private boolean mFlag = true;
private static final int TIME = 3000; private Handler mHandler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
if (msg.what == 0) {
int nowIndex = mViewPager.getCurrentItem(); mViewPager.setCurrentItem(++nowIndex);
}
return false;
}
});
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
} @Override
public void onAttach(Context context) {
super.onAttach(context);
} @Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
// super.onCreateView(inflater, container, savedInstanceState);
View view = inflater.inflate(R.layout.fragment_home,container,false);
mViewPager = (ViewPager) view.findViewById(R.id.home_vp)
ButterKnife.bind(this, view);
addPictures(); mDots = new ImageView[mImageList.size()];
initDots(view); mViewPagerAdapter = new ViewPagerAdapter(mImageList, getContext());
mViewPager.setAdapter(mViewPagerAdapter); mViewPager.setOffscreenPageLimit(500); mViewPager.setOnPageChangeListener(this);
return view; } @Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
} @Override
public void onDestroy() {
super.onDestroy();
} @Override
public void onDestroyView() {
super.onDestroyView(); } @Override
public void onDetach() {
super.onDetach();
} @Override
public void onPause() {
super.onPause();
mFlag = false;
mThread.interrupt();
} @Override
public void onResume() {
super.onResume();
mFlag = true;
showPicture();
} @Override
public void onStart() {
super.onStart();
} @Override
public void onStop() {
super.onStop();
} /**
* 初始化小圆点方法;
*
* @param view
*/
private void initDots(View view) { mWrapDots = (LinearLayout) view.findViewById(R.id.wrap_dots_ll); for (int i = 0; i < mImageList.size(); i++) { mImageView = new ImageView(getContext()); mDots[i] = (ImageView) mWrapDots.getChildAt(i); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(12, 12);
lp.setMargins(3, 0, 3, 0); mDots[i] = mImageView; mWrapDots.addView(mDots[i], lp);
} currentIndex = 0;
mDots[currentIndex].setImageResource(R.drawable.circular_point_shape_selected);
}
public void setCurrentSelected(int index) {
for (int i = 0; i < mImageList.size(); i++) {
if (i == index) {
mDots[i].setImageResource(R.drawable.circular_point_shape_selected); } else {
mDots[i].setImageResource(R.drawable.circular_point_shape);
}
}
}
private void addPictures() { mImageList = new ArrayList<>();
mImageList.add(new ImageBean(R.mipmap.home_ad_btm1));
mImageList.add(new ImageBean(R.mipmap.home_imageview_btm1));
mImageList.add(new ImageBean(R.mipmap.home_imageview_btm2));
mImageList.add(new ImageBean(R.mipmap.home_ad_btm1));
mImageList.add(new ImageBean(R.mipmap.home_imageview_btm1));
}
void showPicture() {
mThread = new Thread(new Runnable() {
@Override
public void run() {
while (mFlag) {
try {
mHandler.sendEmptyMessage(0);
Thread.sleep(TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
mThread.start();
} @Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override
public void onPageSelected(int position) {
setCurrentSelected(position % mImageList.size()); } @Override
public void onPageScrollStateChanged(int state) { } class ViewPagerAdapter extends PagerAdapter { private List<ImageBean> imageList; private Context context; public ViewPagerAdapter(List<ImageBean> imageList, Context context) {
this.imageList = imageList;
this.context = context;
} @Override
public int getCount() {
return imageList != null ? Integer.MAX_VALUE : 0;
} @Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
} @Override
public Object instantiateItem(ViewGroup container, final int position) { View view = LayoutInflater.from(context).inflate(R.layout.item_viewpager, container, false);
ImageView imageView = (ImageView) view.findViewById(R.id.image_item_vp); imageView.setBackgroundResource(imageList.get(position % imageList.size()).getImageId());
container.addView(view); imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), "你点击了第" + (position % imageList.size() + 1) + "个图片", Toast.LENGTH_SHORT).show();
}
}); return view;
} @Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
} } }
fragment_home的布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="none"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <FrameLayout
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_alignParentBottom="true"
android:alpha="0.6"> <android.support.v4.view.ViewPager
android:id="@+id/home_vp"
android:layout_width="match_parent"
android:layout_height="match_parent" /> <LinearLayout
android:id="@+id/wrap_dots_ll"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_gravity="bottom|center_horizontal"
android:gravity="center"
android:orientation="horizontal"
/>
</FrameLayout>
</LinearLayout>
</ScrollView> </LinearLayout>
item_viewpager的布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"> <ImageView
android:id="@+id/image_item_vp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY" /> </RelativeLayout>
ImageBean的代码
package com.gtercn.oneday.bean; /**
* Created by Administrator on 2016/8/4.
*/
public class ImageBean {
private int imageId; private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public ImageBean(int imageId, String name) {
this.imageId = imageId;
this.name = name;
} public ImageBean(int imageId) {
this.imageId = imageId;
} public int getImageId() {
return imageId;
} public void setImageId(int imageId) {
this.imageId = imageId;
}
}
circular_point_shape的布局文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners android:radius="6dp"/>
<stroke android:color="@color/gray12"
android:width="1dp"/>
<solid android:color="@color/gray12"/>
<size android:width="8dp"
android:height="8dp"/>
</shape>
circular_point_shape_selected的布局文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners android:radius="6dp"/>
<stroke android:color="@color/gray4"
android:width="1dp"/>
<solid android:color="@color/gray4"/>
<size android:width="12dp"
android:height="12dp"/>
</shape>
效果图

ViewPager的广告条轮播的更多相关文章
- 使用viewpager实现广告条轮询的效果
先上效果图: viewpager是google在v4-support包中提供的,使用时与listview类似,度需要提供一个adapter, 只不过viewpager提供的是PagerAdapter ...
- 仿百度壁纸客户端(二)——主页自定义ViewPager广告定时轮播图
仿百度壁纸客户端(二)--主页自定义ViewPager广告定时轮播图 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度壁纸客户端( ...
- jQuery - 广告图片轮播切换
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- ViewPager实现广告自动轮播核心代码(Handler+Thread)
ViewPager数据源是4个线性布局,每个布局里面充满一张高度固定.宽度充满父布局的图片.有4个小圆点跟随ViewPager滑动.轮播原本我是用Timer+TimerTask的,但是问题颇多,很是郁 ...
- ViewPager实现图片的轮播
在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的pos ...
- Android中使用ViewPager实现广告条
我们在使用电商或视频的手机客户端时,通常会看到广告条的效果.在网上搜索时才知道使用的是ViewPager,于是自己也做了一个Demo. 以下是效果图: 图中包括背景图片.文字描述以及白点. 其中Vie ...
- Viewpager实现网络图片的轮播
//主意:里面用到了第三方的Xutils.jar包和Imageloader.jar包还用到了访问网络,所以要加网络权限 <uses-permission android:name="a ...
- 6_bootstrap之导航条|轮播图|排版|表单元素|分页
8.导航条 BootStrap已经提供了完整的导航条实例,通常情况下,我们仅需进行简单修改即可使用. 帮助手册位置:组件-------导航条 9.轮播图 BootStrap已经提供了完整的轮播图实例, ...
- 使用ViewPager实现广告自动轮播的效果
package com.loaderman.viewpgerlunbodemo; import android.os.Bundle; import android.os.Handler; import ...
随机推荐
- MySQL(MariaDB)的 SSL 加密复制
背景: 在默认的主从复制过程或远程连接到MySQL/MariaDB所有的链接通信中的数据都是明文的,在局域网内连接倒问题不大:要是在外网里访问数据或则复制,则安全隐患会被放大很多.由于项目要求需要直接 ...
- [Android] how to get facebook profile
Bundle params = new Bundle(); params.putString("fields", "id,email,gender,cover,pictu ...
- jquery.base64.js简单使用
jquery.base64.js, 加密,使用,先引入jquery,然后引入jquery.base64.js 使用如下 js中加密如下 $.base64.encode(result[i].ipadre ...
- Debian8.3.0下安装Odoo8.0步骤
Debian8.3.0下安装Odoo8.0的方法 假设你已经安装好了Debian 系统,使用root帐号执行如下命令 # apt-get update && apt-get upgra ...
- objective-c可变数组
1 #pragma mark ---------------可变数组----------------- 2 // 可以在数组里面进行增删改的操作 3 // 4 // ...
- Javascript中最常用的55个经典技巧(转)
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键 <table border oncontextmenu ...
- 魔法禁书目录2:回家(codevs 3024)
题目描述 Description 大妈打完三战回家,我知道他是怎么回来的,欧洲到日本有L个站点他决定乘坐恰好n次飞机(不是学院都市的超音速飞机)和m次火车来从第一个站点到达最后一个站点.但是有一点很重 ...
- Ionic2 Tutorial
build your first app Now that you have Ionic and its dependencies installed, you can build your firs ...
- Android -- Looper、Handler、MessageQueue等类之间关系的序列图
原文:Android源码解析之(二)-->异步消息机制 通过阅读文章及其中提到的一些参考文章,模模糊糊的理解了Android的异步消息机制.为了能够进行消化吸收,决定把各类之间的交互通过图的形式 ...
- (1)Underscore.js入门
1. Underscore对象封装 Underscore并没有在原生的JavaScript对象原型中进行扩展,而是像jQuery一样,将数据封装在一个自定义对象中(下文中称"Undersco ...