使用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;
}
}
<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;
}
}
相关文章推荐
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现图片左右循环滑动自动播放
- Android 使用ViewPager实现左右循环滑动图片
- 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- 使用ViewPager实现左右循环滑动图片
- 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片
- Android 使用ViewPager实现左右循环滑动图片和显示当前页码
- Android 使用ViewPager实现左右循环滑动图片
- Android使用ViewPager实现左右循环滑动及轮播效果
- Android 使用ViewPager实现图片左右滑动和PhotoView浏览大图