MyActivity.java
package com.su.testgrid3;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.GridView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
/*
* 图片从本地某个文件夹读取显示在gridview中
*
*/
public class TestGrid3Activity extends Activity {
private GridView gridView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[] titles = FileUtil.getImageNames(Environment.getExternalStorageDirectory().getPath());
String[] imagePaths = new String[titles.length];
for (int i = 0; i < titles.length; i++) {
imagePaths[i]="/mnt/sdcard/"+titles[i];
}
gridView = (GridView) findViewById(R.id.gridview);
PictureAdapter adapter = new PictureAdapter(titles, imagePaths, this);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(TestGrid3Activity.this, "你点击了" + (position + 1),
Toast.LENGTH_SHORT).show();
}
});
gridView.setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick(AdapterView<?> parent, View v,
int position, long id) {
Toast.makeText(TestGrid3Activity.this, "你长按了" + (position + 1),
Toast.LENGTH_SHORT).show();
return true;
/*
* 这里需要true
* 因为:OnItemLongClick事件中:down事件返回值标记此次事
* 件是否为点击事件(返回false,是点击事件;返回true,不记为点击事件),
* 而up事件标记此次事件结束时间,也就是判断是否为长按。
*/
}
});
}
}
PictureAdapter.java
// 2012-4-18下午07:46:57
package com.su.testgrid3;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
//自定义适配器
class PictureAdapter extends BaseAdapter {
private LayoutInflater inflater;
private List<Picture> pictures;
public PictureAdapter(String[] titles, String[] images, Context context) {
super();
pictures = new ArrayList<Picture>();
inflater = LayoutInflater.from(context);
for (int i = 0; i < images.length; i++) {
Picture picture = new Picture(titles[i], images[i]);
pictures.add(picture);
}
}
@Override
public int getCount() {
if (null != pictures) {
return pictures.size();
} else {
return 0;
}
}
@Override
public Object getItem(int position) {
return pictures.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.picture_item, null);
viewHolder = new ViewHolder();
viewHolder.title = (TextView) convertView.findViewById(R.id.title);
viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.title.setText(pictures.get(position).getTitle());
//把路径转换为bitmap显示
viewHolder.image.setImageBitmap(BitmapFactory.decodeFile(pictures.get(
position).getImageId()));
return convertView;
}
}
class ViewHolder {
public TextView title;
public ImageView image;
}
Picture.java
// 2012-4-18下午07:47:44
package com.su.testgrid3;
/**
* Picture的Bean
*/
class Picture {
private String title;
private String imageId;
public Picture() {
super();
}
public Picture(String title, String imageId) {
super();
this.title = title;
this.imageId = imageId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImageId() {
return imageId;
}
public void setImageId(String imageId) {
this.imageId = imageId;
}
}
FileUtil.java
// 2012-4-18下午07:49:44
package com.su.testgrid3;
import java.io.File;
/**
* 进行一些辅助的扫描图片操作
*/
public class FileUtil {
public static String[] getImageNames(String folderPath) {
File file01 = new File(folderPath);
String[] files01 = file01.list();
int imageFileNums = 0;
for (int i = 0; i < files01.length; i++) {
File file02 = new File(folderPath + "/" + files01[i]);
if (!file02.isDirectory()) {
if (isImageFile(file02.getName())) {
imageFileNums++;
}
}
}
String[] files02 = new String[imageFileNums];
int j = 0;
for (int i = 0; i < files01.length; i++) {
File file02 = new File(folderPath + "/" + files01[i]);
if (!file02.isDirectory()) {
if (isImageFile(file02.getName())) {
files02[j] = file02.getName();
j++;
}
}
}
return files02;
}
private static boolean isImageFile(String fileName) {
String fileEnd = fileName.substring(fileName.lastIndexOf(".") + 1,
fileName.length());
if (fileEnd.equalsIgnoreCase("jpg")) {
return true;
} else if (fileEnd.equalsIgnoreCase("png")) {
return true;
} else if (fileEnd.equalsIgnoreCase("bmp")) {
return true;
} else {
return false;
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:columnWidth="90dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:gravity="center"
/>
picture_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
>
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="150dp"
android:layout_gravity="center"
android:scaleType="fitXY"
android:padding="4dp"
/>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center_horizontal"
/>
</LinearLayout>
分享到:
相关推荐
该demo是一个gridview异步加载本地图片的例子。而且改实例中向上滚动的时候会加载下一页的数据(类似于分页)。
GridView异步加载网络图片 图文混排
Android完美解决GridView异步加载图片和加载大量图片时出现Out Of Memory问题
Gridview加载网络图片,不带任何jar包,原作者https://blog.csdn.net/Rainary/article/details/77839120,代码经本人整理并测试有效。
用异步加载方式解决GridView加载大量图片出现卡顿的问题。可以查看博文http://blog.csdn.net/yifei1989/article/details/19906821
可以帮助大家学习,怎么设计一个网格视图而不用button。可点击。
浏览sd卡上的图片文件,显示在GridView控件上,自定义图片适配器,点击小图,能在对话框上显示大图
android gridview 加载大量图片。无OOM。 程序运行默认加载SD卡内所有图片文件,这是我写了之后用在一款成熟app里面的。可用
Android使用GridView异步加载(弱引用)网络图片(支持点击查看)Demo
GridView配合Volley来加载网络图片,相关博文:http://www.cnblogs.com/tianzhijiexian/p/4277873.html
可以读取SD卡中指定文件夹里的所有图片,并用gridview显示在视图上。
清晰的展现出如何使用gridview,和使用Glide框架加载图片。并把图片设置成圆形。适合做头像。
ListView GridView ViewPager 异步加载网络图片 +缓存+可配置 万能图片加载器 超级顺畅加载显示 使用简单 教程地址:http://blog.csdn.net/zabio/article/details/19836805
在Android开发App中经常会用到ListView和Gridview的item中加载图片显示的情况。但是如果图片多了就会遇到内存溢出的情况,及时你对图片做了缩放处理但是图片张数多了还是一样的会内存溢出。所以这个时候就需要我们...
GridView加载sd卡图片
【ASP.NET编程知识】asp.net遍历文件夹下所有子文件夹并绑定到gridview上的方法.docx
一个非常好的 android gridview 异步加载图片的例子,需要17以上的api
网络下载图片 异步加载图片 避免内存溢出
gridview加载网络图片
GridView图片墙,ListView嵌入GridView