您的位置:首页 > 其它

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

2013-10-25 22:45 573 查看
<?xml version="1.0" encoding="utf-8"?>

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

android:layout_width="fill_parent"

android:layout_height="100dip"

android:orientation="vertical" >



<!-- 实现图片横向滑动组件声明 -->

<android.support.v4.view.ViewPager

android:id="@+id/imagePages"

android:layout_width="fill_parent"

android:layout_height="100dip" />

<!-- 用于存放导航小圆点 -->

<LinearLayout

android:id="@+id/pointGroup"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:layout_gravity="bottom"

android:layout_marginTop="95dip"

android:gravity="center_horizontal"

android:orientation="horizontal" >

</LinearLayout>

</RelativeLayout>

代码:

package com.foess.frame;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.ByteArrayOutputStream;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.ArrayList;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.os.Bundle;

import android.os.Environment;

import android.os.Handler;

import android.os.Message;

import android.os.Parcelable;

import android.support.v4.view.PagerAdapter;

import android.support.v4.view.ViewPager;

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

import android.util.Log;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.View;

import android.view.ViewGroup;

import android.view.ViewGroup.LayoutParams;

import android.view.Window;

import android.widget.FrameLayout;

import android.widget.ImageView;

import android.widget.LinearLayout;

import android.widget.ProgressBar;

public class NetMainActivity extends Activity {

// 用于装载4个图片布局View

private ArrayList<View> imgViews;

// 声明main布局对象,对应main.xml

private View main;

// 声明滑动图片显示区域ViewPager

private ViewPager viewPager;

// 声明导航显示区域,因为要装载多个小圆点,所以声明为ViewGroup

private ViewGroup pointGroup;

// 声明ImageView[],有多少图片,就应该有对应的导航小圆点view,这些view都放在这个数组中

private ImageView[] pointViews;

// 具体一个小圆点

private ImageView imageView;

// 模拟图片网络路径,正常情况下,这些路径可以通过远程加载方式获取.现在固定路径简单测试

private String[] paths = {"http://10.25.126.51:8080/web/img/a01.png",

"http://10.25.126.51:8080/web/img/a02.png",

"http://10.25.126.51:8080/web/img/a03.png",

"http://10.25.126.51:8080/web/img/a04.png"};

File f;

String ALBUM_PATH=Environment.getExternalStorageDirectory()+"/fsdnb/";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

f = new File(Environment.getExternalStorageDirectory()+"/fsdnb/");

if(!f.exists()){

f.mkdir();

}

// 1. no_title设置,目的图片填充整个页面

requestWindowFeature(Window.FEATURE_NO_TITLE);

// 2. 启动线程用于加载远程图片

new LoadImageThread().start();

}

class LoadImageThread extends Thread{

@Override

public void run() {

//3. 获取LayoutInflater,目的是方便后面得到xml布局文件进行装配

LayoutInflater inflater = getLayoutInflater();

//4. 创建图片view存储集合

imgViews = new ArrayList<View>();

//5. 通过网络方式下载4个图片,并最终放在集合中

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

ImageView iv = new ImageView(NetMainActivity.this);

Bitmap bitmap =

getHttpBitmap(paths[i],String.valueOf(i)+".jpg");

//从网上取图片

iv .setImageBitmap(bitmap);

imgViews.add(iv);

}

//6. 获取main.xml layout对象,他是装配其他图片布局的中心点

// 要记得,它里面声明了一个图片区域ViewPager,以及一个导航指示区域

main = (View)inflater.inflate(R.layout.main,null);

//7. 通过main layout对象获取图片区域ViewPager

viewPager = (ViewPager)main.findViewById(R.id.imagePages);

//8. 通过main layout对象获取导航指示区域

pointGroup = (ViewGroup)main.findViewById(R.id.pointGroup);

//9. 下面开始控制导航小圆点,有多少张img,就要做多大的小圆点数组

pointViews = new ImageView[imgViews.size()];

//10. 根据图片集合的长度决定创建多少小圆点ImageView

for (int i = 0; i < imgViews.size(); i++) {

imageView = new ImageView(NetMainActivity.this);

imageView.setLayoutParams(new LayoutParams(20,20));

imageView.setPadding(20, 0, 20, 0);

pointViews[i] = imageView;



if (i == 0) {

//默认选中第一张图片,加入焦点


pointViews[i].setBackgroundResource(R.drawable.page_indicator_focused);

} else {


pointViews[i].setBackgroundResource(R.drawable.page_indicator);

}

// 把每一个导航小圆点都加入到ViewGroup中

pointGroup.addView(pointViews[i]);

}

handler.sendEmptyMessage(0); //表示下载完毕.

}

}

// 指定保存的路径:

public void saveFile(Bitmap bm, String fileName) throws IOException {

File myCaptureFile = new File(ALBUM_PATH + fileName);

System.out.println("PATH:"+ALBUM_PATH + fileName);

BufferedOutputStream bos = new BufferedOutputStream(

new FileOutputStream(myCaptureFile));

bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);

bos.flush();

bos.close();

}

public Bitmap getHttpBitmap(String url,String a) {

File ff=new File(ALBUM_PATH+a);

if(ff.exists())

{

try {

return(getImageDrawable(ALBUM_PATH+a));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return null;

}

}else

{

try{

URL m = new URL(url);

InputStream i = (InputStream) m.getContent();

DataInputStream in = new DataInputStream(i);

FileOutputStream out = new FileOutputStream(ff);

byte[] buffer = new byte[1024];

int byteread=0;

while ((byteread = in.read(buffer)) != -1) {

out.write(buffer, 0, byteread);

}

in.close();

out.close();

}catch(Exception e){

System.out.println("err:"+e.getMessage());

}

Bitmap bitmap=null;

try

{

URL ur = new URL(url);

InputStream is = ur.openStream();

bitmap = BitmapFactory.decodeStream(is);

//saveFile(bitmap, a);

is.close();

}catch(Exception e)

{

}

return bitmap;

}

}

//=============================================

public Bitmap getImageDrawable(String path)

throws IOException

{

//打开文件

File file = new File(path);

if(!file.exists())

{

return null;

}



ByteArrayOutputStream outStream = new ByteArrayOutputStream();

byte[] bt = new byte[1024];



//得到文件的输入流

InputStream in = new FileInputStream(file);



//将文件读出到输出流中

int readLength = in.read(bt);

while (readLength != -1) {

outStream.write(bt, 0, readLength);

readLength = in.read(bt);

}



//转换成byte 后 再格式化成位图

byte[] data = outStream.toByteArray();

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);// 生成位图



return bitmap;

}

//=============================================

// adapter内部类

// 指引页面数据适配器

class ViewPagerAdapter extends PagerAdapter {

@Override

public int getCount() {

return Integer.MAX_VALUE;//就要这么写!

}

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0 == arg1;

}

@Override

public int getItemPosition(Object object) {

// TODO Auto-generated method stub

return super.getItemPosition(object);

}

@Override

public void destroyItem(View arg0, int arg1, Object arg2) {

// TODO Auto-generated method stub

((ViewPager) arg0).removeView(imgViews.get(arg1%imgViews.size()));

}

@Override

public Object instantiateItem(View arg0, int arg1) {

// TODO Auto-generated method stub

// 获取新的view

((ViewPager) arg0).addView(imgViews.get(arg1%imgViews.size()),0);

return imgViews.get(arg1%imgViews.size());

}

@Override

public void restoreState(Parcelable arg0, ClassLoader arg1) {

// TODO Auto-generated method stub

}

@Override

public Parcelable saveState() {

// TODO Auto-generated method stub

return null;

}

@Override

public void startUpdate(View arg0) {

// TODO Auto-generated method stub

}

@Override

public void finishUpdate(View arg0) {

// TODO Auto-generated method stub

}

}

// 监听器内部类

// 指引页面更改事件监听器

class PointChangeListener implements OnPageChangeListener {

@Override

public void onPageScrollStateChanged(int arg0) {

// TODO Auto-generated method stub

}

@Override

public void onPageScrolled(int arg0, float arg1, int arg2) {

// TODO Auto-generated method stub

}

@Override

public void onPageSelected(int arg0) {

setImageBackground(arg0 %imgViews.size());

}

private void setImageBackground(int selectItems){

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

if(i == selectItems){

pointViews[i].setBackgroundResource(R.drawable.page_indicator_focused);

}else{

pointViews[i].setBackgroundResource(R.drawable.page_indicator);

}

}

}

}

private Handler handler = new Handler() {

public void handleMessage(Message msg) {

switch (msg.what) {

case 0: {

//11. 设置main布局为当前Activity内容

setContentView(main);

//12. 设置viewPager 图片切换Adapter,图片最终能够切换就是在Adapter中实现的

viewPager.setAdapter(new ViewPagerAdapter());

//13. 设置viewPager 页面改变监听器,利用监听器改变小圆点焦点状态

viewPager.setOnPageChangeListener(new PointChangeListener());

//设置ViewPager的默认项, 设置为长度的100倍,这样子开始就能往左滑动

viewPager.setCurrentItem(imgViews.size()*100);

break;

}

}

};

};

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

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