您的位置:首页 > 移动开发 > Android开发

Android ViewPager 实现图片左右滑动查看

2015-04-30 15:35 671 查看
转自: http://blog.163.com/li_xugang/blog/static/1307818302014428591330/
效果图:





左右滑动展示图片,页面底部的小点表示当前图片的位置,浅蓝色的小点表示当前正在查看的图片。

布局文件:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<android.support.v4.view.ViewPager

android:id="@+id/viewpager1"

android:layout_width="fill_parent"

android:layout_height="match_parent"

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

<RelativeLayout

android:layout_width="match_parent"

android:layout_height="match_parent" >

<LinearLayout

android:id="@+id/tipsBox"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true"

android:layout_centerHorizontal="true"

android:layout_marginBottom="36dp"

android:orientation="horizontal"

>

</LinearLayout>

</RelativeLayout>

</FrameLayout>

使用ViewPager需要引入android.support.v4包,用来向后兼容api 4(android 1.6).

上面的布局文件使用FrameLayout(帧)布局方式,帧布局UI元素会层层折叠,上述布局的效果是表示图片索引的小圆点在图片的上方显示。



J***A程序:

自定义类继承Activity

public class MyViewPager1 extends Activity

下面定义一些私有属性:

private ViewPager viewPager;

private ImageView[] tips;//提示性点点数组

private int[] images;//图片ID数组

private int currentPage=0;//当前展示的页码



在onCreate方法中初始化这些属性。

viewPager=(ViewPager)findViewById(R.id.viewpager1);

//图片ID数组

images=new int[]{R.drawable.images1,R.drawable.images2,R.drawable.images3,R.drawable.images4,R.drawable.images5};

//存放点点的容器

LinearLayout tipsBox=(LinearLayout)findViewById(R.id.tipsBox);



//初始化 提示点点

tips=new ImageView[5];

for(int i=0;i<tips.length;i++){

ImageView img=new ImageView(this); //实例化一个点点

img.setLayoutParams(new LayoutParams(10,10));

tips[i]=img;

if(i==0)

{

img.setBackgroundResource(R.drawable.page_now);//蓝色背景

}

else{

img.setBackgroundResource(R.drawable.page);//黑色背景

}



LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

params.leftMargin=5;

params.rightMargin=5;

tipsBox.addView(img, params); //把点点添加到容器中

}





属性初始化完成之后,我们需要给ViewPager设置adapter对象。ViewPager如同ListView一般需要设置适配器,ViewPager的adapter是PagerAdapter。

PagerAdapter adapter=new PagerAdapter(){



@Override

public int getCount() {

// TODO Auto-generated method stub

return images.length;

}



@Override

public boolean isViewFromObject(View arg0, Object arg1) {

// TODO Auto-generated method stub

return arg0==arg1;

}



@Override

public void destroyItem(ViewGroup container,int position,Object o){

//container.removeViewAt(position);

}



//设置ViewPager指定位置要显示的view

@Override

public Object instantiateItem(ViewGroup container,int position){

ImageView im=new ImageView(MyViewPager1.this);

im.setImageResource(images[position]);

container.addView(im);

return im;

}

};

viewPager.setAdapter(adapter);



完成了这些操作我们已经可以实现图片的左右滚动,但是底部的小圆点的背景色并没有随着查看的图片不同而有所改变,这时需要给ViewPager绑定一个事件处理函数,currentPage保存的是当前查看的图片的索引,当向左或向右滚动时currentPage需要重新赋值,设置旧值表示的小圆点的背景为黑色,设置新值表示的小圆点的背景为蓝色。



//更改当前tip

viewPager.setOnPageChangeListener(new OnPageChangeListener(){



@Override

public void onPageScrollStateChanged(int arg0) {

// TODO Auto-generated method stub



}



@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

// TODO Auto-generated method stub



}



@Override

public void onPageSelected(int position) {

// TODO Auto-generated method stub

Log.e("rf",String.valueOf(position));

tips[currentPage].setBackgroundResource(R.drawable.page);

currentPage=position;

tips[position].setBackgroundResource(R.drawable.page_now);

}

});

--------------------------------------------------------------------------------------------------------------------------------------------

下面是完整程序:

package li.example.myfriend;



import android.util.Log;

import android.view.*;

import android.view.ViewGroup.LayoutParams;

import android.widget.Button;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.app.*;

import android.content.*;

import android.os.*;

import android.support.v4.*;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

import android.support.v4.view.ViewPager.OnPageChangeListener;



public class MyViewPager1 extends Activity{



private ViewPager viewPager;

private ImageView[] tips;//提示性点点数组

private int[] images;//图片ID数组

private int currentPage=0;//当前展示的页码

@Override

public void onCreate(Bundle savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_myviewpager_1);

viewPager=(ViewPager)findViewById(R.id.viewpager1);



//存放点点的容器

LinearLayout tipsBox=(LinearLayout)findViewById(R.id.tipsBox);

//初始化图片资源

images=new int[]{R.drawable.images1,R.drawable.images2,R.drawable.images3,R.drawable.images4,R.drawable.images5};



//初始化 提示点点

tips=new ImageView[5];

for(int i=0;i<tips.length;i++){

ImageView img=new ImageView(this);

img.setLayoutParams(new LayoutParams(10,10));

tips[i]=img;

if(i==0)

{

img.setBackgroundResource(R.drawable.page_now);

}

else{

img.setBackgroundResource(R.drawable.page);

}



LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

params.leftMargin=5;

params.rightMargin=5;

tipsBox.addView(img, params);

}



//-----初始化PagerAdapter------

PagerAdapter adapter=new PagerAdapter(){



@Override

public int getCount() {

// TODO Auto-generated method stub

return images.length;

}



@Override

public boolean isViewFromObject(View arg0, Object arg1) {

// TODO Auto-generated method stub

return arg0==arg1;

}



@Override

public void destroyItem(ViewGroup container,int position,Object o){

//container.removeViewAt(position);

}



@Override

public Object instantiateItem(ViewGroup container,int position){

ImageView im=new ImageView(MyViewPager1.this);



im.setImageResource(images[position]);

container.addView(im);

return im;

}

};

viewPager.setAdapter(adapter);



//更改当前tip

viewPager.setOnPageChangeListener(new OnPageChangeListener(){



@Override

public void onPageScrollStateChanged(int arg0) {

// TODO Auto-generated method stub



}



@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

// TODO Auto-generated method stub



}



@Override

public void onPageSelected(int position) {

// TODO Auto-generated method stub

Log.e("rf",String.valueOf(position));

tips[currentPage].setBackgroundResource(R.drawable.page);



currentPage=position;

tips[position].setBackgroundResource(R.drawable.page_now);



}





});

}

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