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

来源:互联网 发布:java 代码 log4j 编辑:程序博客网 时间:2024/05/16 12:11

本例是先从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();}@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic 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;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic Object getItem(int position) {return position;}@Overridepublic 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();@Overrideprotected 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);}}}@Overridepublic boolean onTouchEvent(MotionEvent event) {//把该事件交给手势管理器来处理return gd.onTouchEvent(event);}@Overridepublic boolean onDown(MotionEvent e) {return false;}/** * 对手势操作后组件的处理 */@Overridepublic 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;}@Overridepublic void onLongPress(MotionEvent e) {}@Overridepublic boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,float distanceY) {return false;}@Overridepublic void onShowPress(MotionEvent e) {}@Overridepublic boolean onSingleTapUp(MotionEvent e) {return false;}}


 

 

原创粉丝点击