首先布局

<?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的广告条轮播的更多相关文章

  1. 使用viewpager实现广告条轮询的效果

    先上效果图: viewpager是google在v4-support包中提供的,使用时与listview类似,度需要提供一个adapter, 只不过viewpager提供的是PagerAdapter ...

  2. 仿百度壁纸客户端(二)——主页自定义ViewPager广告定时轮播图

    仿百度壁纸客户端(二)--主页自定义ViewPager广告定时轮播图 百度壁纸系列 仿百度壁纸客户端(一)--主框架搭建,自定义Tab + ViewPager + Fragment 仿百度壁纸客户端( ...

  3. jQuery - 广告图片轮播切换

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  4. ViewPager实现广告自动轮播核心代码(Handler+Thread)

    ViewPager数据源是4个线性布局,每个布局里面充满一张高度固定.宽度充满父布局的图片.有4个小圆点跟随ViewPager滑动.轮播原本我是用Timer+TimerTask的,但是问题颇多,很是郁 ...

  5. ViewPager实现图片的轮播

    在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的pos ...

  6. Android中使用ViewPager实现广告条

    我们在使用电商或视频的手机客户端时,通常会看到广告条的效果.在网上搜索时才知道使用的是ViewPager,于是自己也做了一个Demo. 以下是效果图: 图中包括背景图片.文字描述以及白点. 其中Vie ...

  7. Viewpager实现网络图片的轮播

    //主意:里面用到了第三方的Xutils.jar包和Imageloader.jar包还用到了访问网络,所以要加网络权限 <uses-permission android:name="a ...

  8. 6_bootstrap之导航条|轮播图|排版|表单元素|分页

    8.导航条 BootStrap已经提供了完整的导航条实例,通常情况下,我们仅需进行简单修改即可使用. 帮助手册位置:组件-------导航条 9.轮播图 BootStrap已经提供了完整的轮播图实例, ...

  9. 使用ViewPager实现广告自动轮播的效果

    package com.loaderman.viewpgerlunbodemo; import android.os.Bundle; import android.os.Handler; import ...

随机推荐

  1. nyoj925_国王的烦恼_并查集

    国王的烦恼 时间限制:3000 ms  |  内存限制:65535 KB 难度:2   描述 C国由n个小岛组成,为了方便小岛之间联络,C国在小岛间建立了m座大桥,每座大桥连接两座小岛.两个小岛间可能 ...

  2. VB兼容问题

    window7 64位无法显示打印窗问题 在Windows7 64位和VS2008环境下,PrintDialog.ShowDialog不能显示打印对话框 在VS2008中编写?如下代码: PrintD ...

  3. php 与 js 正则匹配

    php : <?php $str='<p>xxx</p>abc';$matches = array();if(preg_match('/<p>.*<\/ ...

  4. HTML标记语法总结

    一.HTML标记类型 1.单标记 语法:<标记名>,如:<img>.<br>.<hr> 2.双标记 语法:<标记名>…标记内容…</标 ...

  5. Alcatraz安装在xcode7失败执行下面代码

    1.步奏rm -rf ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins/Alcatraz.xcplugin 2.步奏 rm ...

  6. August 29th 2016 Week 36th Monday

    Every has the capital to dream. 每个人都有做梦的本钱. Your vision, our mission. That is an advertisment of UMo ...

  7. August 23rd 2016 Week 35th Tuesday

    The very essence of romance is uncertainty. 浪漫的精髓就在于它充满种种可能. And the uncertainty of life may be also ...

  8. 解的个数(codevs 1213)

    题目描述 Description 已知整数x,y满足如下面的条件: ax+by+c = 0 p<=x<=q r<=y<=s 求满足这些条件的x,y的个数. 输入描述 Input ...

  9. Stanford大学机器学习公开课(三):局部加权回归、最小二乘的概率解释、逻辑回归、感知器算法

    (一)局部加权回归 通常情况下的线性拟合不能很好地预测所有的值,因为它容易导致欠拟合(under fitting).如下图的左图.而多项式拟合能拟合所有数据,但是在预测新样本的时候又会变得很糟糕,因为 ...

  10. DB2 create partitioned table

    在Z上和开放平台上的创建方法还不太一样,两套人马开发出来的就是牛! 蛋疼…… 贴不同类型的几个例子感受一下,Z上的ASC,DESC不见了: CREATE TABLE foo(a INT) PARTIT ...