图片查看器-从SD卡读取图片

本例是先从SD卡读取图片信息,显示在列表视图中;点击图片即可跳转另一个activity查看图片,并且可以浏览图片。

读取图片代码:

package com.mylesson15.activity;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.MediaStore.Images.Media;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
/**
 * 图片展示类(列表视图)
 * @author Administrator
 *
 */
public class LookImageActivity extends Activity{
	/**列表视图*/
	private ListView listView;
	/**图片对象*/
	private ImageView image;
	/**图片名字*/
	private String name;
	/**图片名字集合*/
	private ArrayList<String> list = new ArrayList();
	/**图片对象集合*/
	private ArrayList<HashMap<String,Object>> picList = new ArrayList();
	
	/**
	 * 初始化
	 */
	public void initData(){
		//查询SD卡所有图片,得到游标
		Cursor cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI, null, null, null, null);
		while(cursor.moveToNext()){
			//得到图片的名字
			String name = cursor.getString(cursor.getColumnIndex(Media.DISPLAY_NAME));
			//得到图片的描述信息
			String info = cursor.getString(cursor.getColumnIndex(Media.DESCRIPTION));
			//图片数据
			byte[] data = cursor.getBlob(cursor.getColumnIndex(Media.DATA));
			HashMap map = new HashMap();
			map.put("name", name==null ? "":name);
			map.put("info", info==null ? "":info);
			map.put("data", data);
			picList.add(map);
		}
	cursor.close();
	}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);		
		setContentView(R.layout.look_iamge_layout);
		//调用初始化方法
		initData();
		listView = (ListView) findViewById(R.id.image_listView);
		//创建适配器
		BaseAdapter adapter = new BaseAdapter() {
			
			@Override
			public View getView(int position, View convertView, ViewGroup parent) {
				
				if(convertView==null){
					convertView = getLayoutInflater().inflate(R.layout.look_image_listview_content, null);
				}
				image = (ImageView) convertView.findViewById(R.id.picture_list_content_iv_pic);
				TextView nameText = (TextView) convertView.findViewById(R.id.picture_list_content_tv_name);
				TextView infoText = (TextView) convertView.findViewById(R.id.picture_list_content_tv_info);
				
			    name = picList.get(position).get("name").toString();
			    String info = picList.get(position).get("info").toString();
				byte[] bs = (byte[]) picList.get(position).get("data");
				//设置图片信息
				nameText.setText(name);
				infoText.setText(info);
				//设置图片
				Bitmap bitmap = BitmapFactory.decodeFile(new String(bs,0,bs.length-1));
				image.setImageBitmap(bitmap);
				//设置标识符
				image.setTag(position);
				list.add(name);
				
				//为图片添加监听
				image.setOnClickListener(new OnClickListener() {
					
					@Override
					public void onClick(View v) {
						
						Intent intent = new Intent(LookImageActivity.this,LargeImageActivity.class);
						int id =Integer.parseInt(v.getTag().toString());
						intent.putExtra("id", id);
						intent.putExtra("list", list);
						startActivity(intent);
					}
				});
				return convertView;
			}
			
			@Override
			public long getItemId(int position) {
				return position;
			}
			
			@Override
			public Object getItem(int position) {
				return position;
			}
			
			@Override
			public int getCount() {
				return picList.size();
			}
		};
		
		listView.setAdapter(adapter);
	}
}


 

浏览图片,手势滑动屏幕即可浏览图片;这里用到手势管理器和ontouchEvent()方法。

查看图片代码:

package com.mylesson15.activity;

import java.util.ArrayList;

import android.app.Activity;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.MediaStore.Images.Media;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
/**
 * 图片查看类(手势管理)
 * @author Administrator
 *
 */
public class LargeImageActivity extends Activity implements OnGestureListener{
	/**图片视图*/
	private ImageView image;
	/**图片所在的行号*/
	private int id;
	/**手势管理器*/
	private GestureDetector gd;
	private Cursor cursor;
	/**图片的字节数组*/
	private byte[] data;
	/**图片名字集合*/
	private ArrayList<String> list = new ArrayList();
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.llook_image_browse_layout);
		image = (ImageView) findViewById(R.id.look_imageView_large);
		//注册手势管理
		gd = new GestureDetector(this);
		//得到行号
		id = getIntent().getIntExtra("id", id);
		//得到传递过来的图片名字集合
		list = getIntent().getStringArrayListExtra("list");
		//调用设置图片方法
		setImage();	
	}

	/**
	 * 设置图片
	 */
	public void setImage(){
		//到SD卡查询图片信息
		cursor = getContentResolver().query(Media.EXTERNAL_CONTENT_URI,
				null,null,null,null);
		
		while(cursor.moveToNext()){
			String name = cursor.getString(cursor.getColumnIndex(Media.DISPLAY_NAME));
			byte[] data = cursor.getBlob(cursor.getColumnIndex(Media.DATA));
			//查询到的图片名字和点击传递过来的图片名字相同时,设置图片
			if(name.equals(list.get(id))){
				Bitmap bitmap = BitmapFactory.decodeFile(new String(data,0,data.length-1));
				image.setImageBitmap(bitmap);
			}
		}
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		//把该事件交给手势管理器来处理
		return gd.onTouchEvent(event);
	}
	@Override
	public boolean onDown(MotionEvent e) {
		return false;
	}
	/**
	 * 对手势操作后组件的处理
	 */
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		//从右往左滑动
		if(e1.getX()-e2.getX()>50){
			id++;
			if(id<=cursor.getCount()){
				setImage();
			}else{
				id=0;
				setImage();
			}
		}
		//从左往右滑动
		if(e1.getX()-e2.getX()<50){
			id--;
			if(id>=0){
				setImage();
			}else{
				id=cursor.getCount();
				setImage();
			}
		}
		return false;
	}
	@Override
	public void onLongPress(MotionEvent e) {}
	@Override
	public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
			float distanceY) {
		return false;
	}
	@Override
	public void onShowPress(MotionEvent e) {}
	@Override
	public boolean onSingleTapUp(MotionEvent e) {
		return false;
	}

}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值