Android中ImageSwitcher结合Gallery展示SD卡中的资源图片
16lz
2021-01-23
先直接上代码:
photoscan.xml
<?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="fill_parent"> <ImageSwitcher android:id="@+id/switcher" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center" android:scaleType="matrix" ></ImageSwitcher> <Gallery android:id="@+id/gallery" android:layout_width="fill_parent" android:background="#55000000" android:layout_height="100dip" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:gravity="center_vertical" android:spacing="8dip" /> </RelativeLayout>
PictureViewAct.java
package com.liang.picdemo;import java.io.File;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.graphics.drawable.BitmapDrawable;import android.os.Bundle;import android.os.Environment;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.animation.AnimationUtils;import android.widget.AdapterView;import android.widget.Gallery;import android.widget.ImageSwitcher;import android.widget.ImageView;import android.widget.LinearLayout.LayoutParams;import android.widget.ViewSwitcher.ViewFactory; /** * 图片浏览 * @author aokunsang * @Date 2011-12-6 */ public class PictureViewAct extends Activity implements ViewFactory{ // private static String imgPath = Environment.getExternalStorageDirectory().getPath() + "/"+"tempPic"; // private static String imgPath = Environment.getExternalStorageDirectory().getPath() + "/"+"image" ; private static String imgPath = Environment.getExternalStorageDirectory().getPath() ; private ImageSwitcher imageSwitcher; private Gallery gallery; private List<String> photoList; private int downX,upX; private String newFilePath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.photoscan); photoList = readFileList(); imageSwitcher = (ImageSwitcher)findViewById(R.id.switcher); imageSwitcher.setFactory(this); /* * 淡入淡出效果 */ imageSwitcher.setInAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_in)); imageSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this, android.R.anim.fade_out)); imageSwitcher.setOnTouchListener(touchListener); gallery = (Gallery)findViewById(R.id.gallery); gallery.setAdapter(new ImageAdapter( photoList,this)); gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long when) { newFilePath = photoList.get(position); Bitmap bm = BitmapFactory.decodeFile(photoList.get(position)); BitmapDrawable bd = new BitmapDrawable(bm); imageSwitcher.setImageDrawable(bd); } public void onNothingSelected(AdapterView<?> arg0) {} }); } /** * 注册一个触摸事件 */ private OnTouchListener touchListener = new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if(event.getAction()==MotionEvent.ACTION_DOWN) { downX=(int) event.getX();//取得按下时的坐标 return true; } else if(event.getAction()==MotionEvent.ACTION_UP) { upX=(int) event.getX();//取得松开时的坐标 int index=0; if(upX-downX>100)//从左拖到右,即看前一张 { //如果是第一,则去到尾部 if(gallery.getSelectedItemPosition()==0) index=gallery.getCount()-1; else index=gallery.getSelectedItemPosition()-1; } else if(downX-upX>100)//从右拖到左,即看后一张 { //如果是最后,则去到第一 if(gallery.getSelectedItemPosition()==(gallery.getCount()-1)) index=0; else index=gallery.getSelectedItemPosition()+1; } //改变gallery图片所选,自动触发ImageSwitcher的setOnItemSelectedListener gallery.setSelection(index, true); return true; } return false; } }; /** * 获取SD卡中的所有图片路径 * @return */ private List<String> readFileList(){ List<String> fileList = new ArrayList<String>(); File fileDir = new File(imgPath); File[] files = fileDir.listFiles(); if(files!=null){ for(File file:files){ String fileName = file.getName(); if (fileName.lastIndexOf(".") > 0 && fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()).equals("jpg")){ fileList.add(file.getPath()); } } } return fileList; } public View makeView() { ImageView imageView = new ImageView(this); imageView.setScaleType(ImageView.ScaleType.CENTER); imageView.setLayoutParams(new ImageSwitcher.LayoutParams(//自适应图片大小 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); return imageView; } }
图片适配器:
ImageAdapter.java
package com.liang.picdemo;import java.util.List;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Gallery;import android.widget.ImageView;public class ImageAdapter extends BaseAdapter {private List<String> photoList; // 图片地址listprivate Context context;public ImageAdapter(List<String> photoList, Context context) {this.photoList = photoList;this.context = context;}public void addImage(String imageUrl) {photoList.add(imageUrl);}public int getCount() {return photoList.size();}public Object getItem(int position) {return photoList.get(position);}public long getItemId(int position) {return position;}public View getView(int position, View convertView, ViewGroup parent) {ImageView image = new ImageView(context);Bitmap bm = BitmapFactory.decodeFile(photoList.get(position));image.setImageBitmap(bm);image.setScaleType(ImageView.ScaleType.CENTER_CROP);image.setLayoutParams(new Gallery.LayoutParams(100, 100));return image;}}
更多相关文章
- ImageView 设置图片
- 阅读《Android 从入门到精通》(24)——切换图片
- android 删除SD卡或者手机的缓存图片和目录
- android 视频图片混合轮播实现
- android用ImageView显示网络图片
- android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出
- android 运用AsyncTask 获取图片并显示
- android中网络图片的显示