`

ListView形式预览图片

 
阅读更多


 


 

public class Main extends Activity implements OnItemClickListener {
	private ListView listView;// 装载缩小的图片
	private ImageAdapter imageAdapter;
	public static int imagePosition;// 图片的下标
	public static Uri[] imageUri;// 图片的URL

	public static List<String> imagePaths;// 存放图片路径的List
	public String fileName[];
	Bitmap bitmap = null;// 原位图

	Bitmap smallbitmap = null;// 缩小的位图

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
		setTitle("相册浏览——ListView");
		setTitleColor(Color.YELLOW);
		setContentView(R.layout.main);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);

		setProgressBarIndeterminateVisibility(true);// 显示标题栏的进度圈
		initView();// 初始化
		final Object data = getLastNonConfigurationInstance();// 得到横屏时临时存储的数据
		if (data == null) {// 为空重新加载
			new getImagesFromSD().execute();
		} else {
			final LoadedImage[] photos = (LoadedImage[]) data;
			if (photos.length == 0) {
				new getImagesFromSD().execute();
			}
			for (LoadedImage photo : photos) {
				addImage(photo);
			}
		}

	}

	// 初始化
	private void initView() {
		imagePaths = Utils.getImagePathFromSDCard();// 获得图片路径
		listView = (ListView) findViewById(R.id.test_lv);
		imageAdapter = new ImageAdapter(getApplicationContext());
		listView.setAdapter(imageAdapter);
	}

	private void addImage(LoadedImage... value) {
		for (LoadedImage image : value) {
			imageAdapter.addPhoto(image);// 把图片添加到适配器里面,以便调整图片的属性
			imageAdapter.notifyDataSetChanged();
		}
	}

	// 读取sdcard上的图片
	class getImagesFromSD extends AsyncTask<Object, LoadedImage, Object> {
		protected Object doInBackground(Object... params) {

			imageUri = new Uri[imagePaths.size()];// 声明imageUri的长度
			for (int i = 0; i < imagePaths.size(); i++) {
				String path = imagePaths.get(i);
				BitmapFactory.Options options = new BitmapFactory.Options();
				options.inSampleSize = 5;
				bitmap = BitmapFactory.decodeFile(path, options);
				if (bitmap != null) {
					smallbitmap = Bitmap.createScaledBitmap(bitmap, 60, 60,
							true);// 将原来的位图缩小
					bitmap.recycle();// 释放内存
					if (smallbitmap != null) {
						publishProgress(new LoadedImage(smallbitmap));
					}
				}
			}
			return null;
		}

		@Override
		public void onProgressUpdate(LoadedImage... value) {
			addImage(value);
		}

		// 当加载完时停止标题栏的进度圈
		@Override
		protected void onPostExecute(Object result) {
			setProgressBarIndeterminateVisibility(false);
		}
	}

	// 自定义图片适配器
	class ImageAdapter extends BaseAdapter {
		private Context mContext;
		private ArrayList<LoadedImage> photos = new ArrayList<LoadedImage>();

		public ImageAdapter(Context context) {
			mContext = context;
		}

		public void addPhoto(LoadedImage photo) {// 把图片添加到数组
			photos.add(photo);
		}

		public int getCount() {// 得到图片数量
			return photos.size();
		}

		public Object getItem(int position) {
			return photos.get(position);
		}

		public long getItemId(int position) {
			return position;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			LinearLayout linearLayout = new LinearLayout(mContext);// 创建LinearLayout
			linearLayout.setOrientation(LinearLayout.HORIZONTAL);
			linearLayout.setPadding(10, 2, 2, 2);
			linearLayout.setGravity(Gravity.LEFT);

			ImageView imageView = new ImageView(mContext); // 创建ImageView
			imageView.setAdjustViewBounds(true);
			imageView.setScaleType(ImageView.ScaleType.CENTER);
			imageView.setPadding(2, 2, 2, 2);// 控制图片距离窗口的位置
			imageView.setImageBitmap(photos.get(position).getBitmap());

			TextView textView = new TextView(mContext);// 创建TextextViewiew
			textView.setPadding(10, 2, 2, 2);
			textView.setTextSize(17);
			textView.setTextColor(Color.YELLOW);
			textView.setLayoutParams(new LinearLayout.LayoutParams(
					LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
			textView.setText(Utils.getName(imagePaths.get(position))); // 设置TextextViewiew显示的内容

			linearLayout.addView(imageView); // 将ImageView添加到线性布局中
			linearLayout.addView(textView);// 将textView添加到线性布局中
			return linearLayout;
		}
	}

	// 加载图片
	private static class LoadedImage {
		Bitmap mBitmap;

		LoadedImage(Bitmap bitmap) {
			mBitmap = bitmap;
		}

		public Bitmap getBitmap() {
			return mBitmap;
		}
	}

	// 图片点击监听
	public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
		imagePosition = position;// 把图片位置赋给静态变量imagePosition,方便后面调用
		// Intent intent = new Intent(Main.this, GalleryImage.class);// 跳转到大图浏览
		// startActivity(intent);
	}

}

 

  • 大小: 56.6 KB
分享到:
评论

相关推荐

    ListView打印预览功能实例VB源程序

    - 打印预览通常需要先将ListView控件的内容转换为适合打印的格式,如文本或图片。 - 可以使用Graphics对象绘制ListView到Bitmap,从而创建一个可打印的图像版本。 - 使用PrintDocument控件处理实际的打印任务,...

    Listview 浏览照片及相关信息

    通过设置 `ListView` 的属性、定义数据结构、填充数据以及自定义绘制逻辑,可以实现在列表视图中以图标形式展示照片的功能。这种方法不仅可以提高用户界面的美观度,还能有效提升用户体验。希望本文能够帮助开发者更...

    windows mobile 支持一项多行的ListView

    这通常通过在ListView项模板中嵌入多个控件,如Image(用于显示预览图片)和Label(用于显示文字数据)来实现。这样的设计可以提高用户体验,因为用户能够在不打开详情页的情况下获取更多的信息。 要实现这样的功能...

    Listview 中包含GridView

    这样,用户在浏览列表时能快速预览每个新闻的图片,而不需要打开详情页。 实现这种设计通常需要以下步骤: 1. **创建自定义Adapter**:继承自BaseAdapter,重写`getView()`方法,返回一个包含GridView的View。在...

    C#实现图片个性化预览

    本项目"**C#实现图片个性化预览**"旨在创建一个能够以小图标的形式预览文件夹下图片,并支持用户点击后进行单独浏览的应用程序。这个功能的实现主要依赖于C#编程语言以及.NET框架的相关组件,下面将详细讲解实现这一...

    gridview+listview调用本机相册文件夹分别展示

    文件夹选择和图片预览** 在ListView中,每个文件夹条目可以是一个可点击的视图,点击后启动一个新的Activity,使用GridView展示选中文件夹的图片。可以使用Intent的ACTION_PICK或者ACTION_GET_CONTENT来打开相册并...

    Listview控件打印示例[ListViewPrint.rar]-精品源代码

    在Windows编程领域,ListView控件是经常被使用的组件,它允许开发者展示列表形式的数据,并提供多种视图模式,如小图标、大图标、列表和详细信息等。在某些情况下,可能需要将ListView控件的内容打印出来,比如报表...

    水平ListView

    这种布局方式常用于展示一系列相关的、横向排列的内容,如日历中的日期、照片应用中的图片预览等。 二、应用场景 1. 图片轮播:在许多应用的启动页或首页,常常可以看到图片轮播效果,这通常会用到水平ListView或...

    聊天ListView

    本项目“聊天ListView”旨在实现一个类似微信聊天界面的功能,展示多种布局效果,包括文字、图片、语音消息等不同类型的聊天内容。在这个项目中,我们将探讨以下几个关键知识点: 1. **自定义Adapter**: - `...

    ShareFiles1.0_ListView_weightjuw_模拟资源管理器_

    4. 预览功能,对于图片、文本等常见类型的文件提供预览。 5. 高效的搜索功能,快速定位所需文件。 6. 可能还包含文件分享功能,让用户能够通过蓝牙、邮件或其他方式分享文件。 通过深入理解ListView的工作原理以及...

    ListViewTreeView实现资源管理器

    这通常需要根据文件类型来决定预览的方式,比如图片文件可以直接显示缩略图,文本文件则显示部分内容,而其他类型的文件可能需要借助外部组件或API来实现。 6. **图形界面设计**:为了提供良好的用户体验,图形界面...

    将选择的图片显示在listview中,并显示filename,path和type的简单实例

    在本实例中,我们将探讨如何将用户选择的图片显示在C#程序的ListView控件中,并同时展示图片...通过掌握这些知识点,开发者可以进一步学习如何扩展程序功能,例如添加图片预览、文件管理功能或实现更加复杂的用户交互。

    android 模仿微信上传图片ui

    这个列表视图的每个单元格应该包含一张预览图片、选择状态(例如勾选图标)以及可能的图片名称或日期等信息。图片的显示可以通过 glide、picasso 等库来优化加载速度和用户体验。 接着,为了允许用户从相册中选择...

    好用的文件管理器,功能齐全,适合android开发初学者

    9. **文件预览和选择**:文件管理器还可能包含文件预览功能,例如图片、音频、视频的预览。这需要适配各种文件类型的查看器,或者利用系统自带的媒体播放器。 10. **多选和剪贴板功能**:允许用户选择多个文件并...

    简单相册.rar

    描述中提到的“缩略显示”,是指在相册中以小图形式预览图片,这通常需要用到`Bitmap`类来加载和处理图片。由于原始图片可能较大,直接加载可能导致内存问题,所以通常会使用`BitmapFactory`的`decodeStream`或`...

    listview_images:OpenObject 7.x模块可在OpenERP列表视图中显示图像

    在OpenERP/Odoo中,列表视图是一种常见的数据展示方式,它以表格的形式列出数据库中的记录,方便用户快速浏览和操作大量数据。 3. **模块化设计**: OpenERP/Odoo的一大特点是模块化的系统设计,用户可以根据需求...

    Android仿微信图片上传

    - JSON常用于封装上传请求的数据,包括图片的Base64编码字符串或其他形式的二进制数据。使用Gson或Jackson库可以方便地处理JSON序列化和反序列化。 6. **进度条反馈**: - 在上传过程中,显示进度条是提高用户...

    C#打印实例10个

    2. **ListView打印**:ListView控件通常用来显示列表或表格形式的数据。打印ListView涉及到转换控件中的视图到适合打印的格式。可以先将ListView的内容导出为文本或表格,再利用PrintDocument的PrintPage事件来绘制...

    Android网格布局GridView学习使用

    这个时候用ListView的话就显得不是太合适了,因为ListView的展现形式毕竟不适合这种预览要求,那么通过什么视图组件可 以实现呢?这里就可以使用GridView,android中的网格布局来实现了。 GridView控件用于把一系列...

    android demo

    通过请求权限、启动相机预览、捕获图像、处理图片文件等步骤,可以实现应用内的拍照功能。 4. **Service**:Service是Android中的一种后台运行组件,可以在用户不交互的情况下持续执行任务。例如,你可以创建一个...

Global site tag (gtag.js) - Google Analytics