您的位置:首页 > 其它

使用ViewPager实现左右循环滑动图片

2015-11-06 15:16 218 查看
•android-support-v4.jar,这是谷歌官方 给我们提供的一个兼容低版本Android设备的软件包,里面包囊了只有在Android3.0以上可以使用的api。而ViewPager就是其中之
一,利用它我们可以做很多事情,从最简单的导航,到页面切换菜单等等。

•ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样。

下面是大概样图:









这个是非常常见的应用

下面给出实现的代码:

源代码:

<pre name="code" class="java">package com.example.demo;
import android.annotation.TargetApi;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;
import android.widget.LinearLayout;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class MainActivity extends ActionBarActivity {
private ViewPager pager;
private ImageView[] images;
private ImageView[] dots;
private ImageView imageView;
private boolean isLoop = true;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
pager.setCurrentItem(pager.getCurrentItem() + 1);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//载入图片资源ID
pager = (ViewPager) findViewById(R.id.adv_pager);
ViewGroup group = (ViewGroup) findViewById(R.id.viewGroup);
//这里存放的是四张广告背景
images = new ImageView[4];
for (int i = 0; i < 4; i++) {
ImageView img = new ImageView(this);
switch (i) {
case 0:
img.setBackgroundColor(Color.GREEN);
break;
case 1:
img.setBackgroundColor(Color.RED);
break;
case 2:
img.setBackgroundColor(Color.YELLOW);
break;
case 3:
img.setBackgroundColor(Color.CYAN);
break;
default:
break;
}
images[i]=img;
}
//对dots进行填充
dots = new ImageView[images.length];
//小图标
for (int i = 0; i < images.length; i++) {
imageView = new ImageView(this);
//LinearLayout.LayoutParams.WRAP_CONTENT
LinearLayout.LayoutParams layout = new LinearLayout.LayoutParams(20,20);
layout.setMargins(5, 5, 5, 5);
imageView.setLayoutParams(layout);
dots[i] = imageView;
if (i == 0) {
dots[i].setBackgroundResource(R.drawable.aaa);
} else {
dots[i].setBackgroundResource(R.drawable.bbb);
}
group.addView(dots[i]);//将点点加入到ViewGroup中
}
//设置Adapter
pager.setAdapter(new AdvAdapter(images));
//设置监听,主要是设置点点的背景
pager.setOnPageChangeListener(new GuidePageChangeListener());
/**
* 2147483647 / 2 = 1073741820 - 1
* 设置ViewPager的当前项为一个比较大的数,以便一开始就可以左右循环滑动
*/
int n = Integer.MAX_VALUE / 2 % dots.length;
int itemPosition = Integer.MAX_VALUE / 2 - n;
pager.setCurrentItem(itemPosition);
// 自动切换页面功能
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//sendEmptyMessageDelayed中就是构建了一个Message,
//然后把这个Message的what设置成sendEmptyMessage方法中的What参数即可。
handler.sendEmptyMessage(0);
}
}
}).start();
}
private final class GuidePageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int arg0) {
int a = arg0 % dots.length;
for (int i = 0; i < dots.length; i++) {
if(a==i){
dots[i].setBackgroundResource(R.drawable.aaa);
}else {
dots[i].setBackgroundResource(R.drawable.bbb);
}
}
}
}
private final class AdvAdapter extends PagerAdapter {
private ImageView[] views = null;
public AdvAdapter(ImageView[] advPics) {
this.views = advPics;
}
/**
* 销毁预加载以外的view对象, 会把需要销毁的对象的索引位置传进来,就是position,
* 因为imageViews只有四条数据,而position将会取到很大的值,
* 所以使用取余数的方法来获取每一条数据项。
*/
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView(views[arg1%dots.length]);
}
/**
* 该方法将返回所包含的 Item总个数。为了实现一种循环滚动的效果,返回了基本整型的最大值,这样就会创建很多的Item,
* 其实这并非是真正的无限循环。
*/
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
/**
* 载入图片进去
*/
@Override
public Object instantiateItem(View arg0, int arg1) {
((ViewPager) arg0).addView(views[arg1%dots.length], 0);
return views[arg1%dots.length];
}
/**
* 判断出去的view是否等于进来的view 如果为true直接复用
*/
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
}
}





布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.demo.MainActivity" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<!-- ViewPager是一个控件 -->
<android.support.v4.view.ViewPager
android:id="@+id/adv_pager"
android:layout_width="match_parent"
android:layout_height="160dp" >

</android.support.v4.view.ViewPager>

<LinearLayout
android:id="@+id/viewGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/adv_pager"
android:layout_alignParentLeft="true"
android:gravity="right"
android:orientation="horizontal" >
</LinearLayout>

</RelativeLayout>

</RelativeLayout>


?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: