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>
分享到:
相关推荐
- **滚动监听**:监听GridView的滚动事件,只在即将可见的item范围内加载图片,实现“滚动即加载”。 - **错误处理**:添加异常处理机制,当图片加载失败时,可以显示占位符或默认图片。 参考链接中的博客文章...
AsyImageDemo这个名字很可能代表了这个例子中用到了异步加载图片的代码实现,可能包含了自定义Adapter、图片加载逻辑以及滚动监听等相关类。通过学习和理解这个示例,开发者可以更好地理解和运用Android中的图片加载...
本教程将详细介绍如何在GridView中加载本地图片,并实现每个图片项可点击的功能。 首先,我们需要在XML布局文件中创建GridView。在布局文件中添加以下代码: ```xml <GridView android:id="@+id/gridView" ...
GridView的适配器(如BaseAdapter或ArrayAdapter)需要扩展以包含异步加载图片的功能。在getView()方法中,启动异步任务加载图片,并在图片加载完成后更新ImageView。 4. **缓存策略** 为了提高性能和减少网络...
在本项目中,“Gridview加载网络图片Andriod源码”提供了实现GridView加载网络图片的功能,无需依赖额外的jar包,这使得项目更轻量且易于维护。 首先,我们需要了解如何在Android中处理网络图片。在Android API 24...
2. 使用BitmapFactory.Options:在加载图片时,利用Options对象设置inSampleSize,进行图片采样率调整,降低图片大小。 3. 内存缓存策略:使用LRUCache或LruCache(Android SDK 16+)进行内存管理,根据缓存大小自动...
不过,如果图片信息(如路径、名称等)需要从服务器获取,可以使用JSON作为数据交换格式,通过网络请求加载图片列表。 8. ** prjGridviewApp**: 这可能是项目文件的名称,可能包含了实现上述功能的代码示例。通常...
不过,需要注意的是,随着加载图片数量的增加,可能会对内存造成压力,因此在实际应用中,还需要考虑图片的缓存策略和内存管理,避免内存泄漏和ANR(应用无响应)问题。 总的来说,结合GridView和Volley加载网络...
在加载图片时,应根据ImageView的大小进行合适的解码,避免加载全尺寸图片。 4. 使用第三方库:有许多优秀的开源库可以帮助我们更高效地实现图片异步加载,例如Picasso、Glide和Fresco。这些库已经考虑到了许多优化...
在加载图片时,如果一次性加载所有图片到内存中,特别是高分辨率的图片,会迅速消耗大量内存,从而引发OOM。 针对这个问题,我们可以采取以下策略: 1. **使用低分辨率的缩略图**:加载原图前,先将其压缩为适合...
首先,我们需要理解“异步加载图片”的概念。在Android中,直接在主线程中进行网络请求或处理大数据量的操作会阻塞UI,导致应用无响应(ANR)。因此,我们需要将这类耗时操作放在子线程中,这就是异步加载的基本思想...
在Android系统中,获取SD卡中的特定文件夹内的所有图片并将其展示在GridView视图上,是一项常见的功能,尤其在照片浏览或者相册类应用中非常常见。以下将详细讲解这个过程涉及的主要知识点: 1. **权限管理**: 在...
适配器会根据文件夹中的图片数量创建相应的视图,并用Glide加载图片。 6. **权限管理**:从Android 6.0(API级别23)开始,访问外部存储需要运行时权限。因此,在AndroidManifest.xml中声明`READ_EXTERNAL_STORAGE`...
2. ** 异步加载图片的重要性** - 直接在主线程加载网络图片会导致应用卡顿,用户体验下降,因为主线程负责处理用户交互和UI更新。 - 异步加载是在后台线程执行耗时操作,如下载和解码图片,然后在主线程更新UI,...
在GridView中加载图片时结合使用Glide,可以实现快速且高效的图片展示,特别是当需要将图片裁剪为圆形,如作为头像显示时。 首先,我们需要在项目中引入Glide库。在build.gradle模块文件中添加依赖: ```groovy ...
动态加载图片的优势在于,可以根据后台数据的变化实时更新显示,比如状态图标、用户头像等。 要在GridControl中实现动态加载图片,你需要遵循以下步骤: 1. **创建图片列**:在设计时或运行时,你需要为...
使用UIL,我们可以轻松地在GridView中加载图片,同时处理网络和本地资源。 2. **Picasso**:由Square公司开发的简单易用的图片加载库,自动处理图片的缓存和加载。Picasso支持简单的API调用来显示和转换图片,使得...
ListView GridView ViewPager 异步加载网络图片 +缓存+可配置 万能图片加载器 超级顺畅加载显示 使用简单 教程地址:http://blog.csdn.net/zabio/article/details/19836805
在Android开发App中经常会用到ListView和Gridview的item中加载图片显示的情况。但是如果图片多了就会遇到内存溢出的情况,及时你对图片做了缩放处理但是图片张数多了还是一样的会内存溢出。所以这个时候就需要我们...
首先,要遍历文件夹下的所有子文件夹,可以使用`System.IO`命名空间中的`Directory`类。在ASP.NET中,`Directory.GetDirectories()`方法用于获取指定目录及其子目录中的所有目录路径。此方法接受一个路径作为参数,...