我一直在尝试创建一个用于在gridview中显示图像的imageGallery应用。我希望它只显示图像目录。但是当我打开它时,图像不会显示。代码似乎没有错。我不知道为什么它不工作。我没有得到任何错误或任何运行时异常。任何人都可以帮助并告诉我我做错了什么?任何形式的帮助表示赞赏。谢谢。
imageGallery.java :
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.TextView;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class imageGallery extends Activity {
private ArrayList<String> fileList = new ArrayList<>();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_image_gallery);
GridView imagegrid = (GridView) findViewById(R.id.gridview);
imagegrid.setAdapter(new MyGridAdapter());
File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
getFile(root);
}
public ArrayList<String> getFile(File dir) {
File listFile[] = dir.listFiles();
if (listFile != null && listFile.length > 0) {
for (File file : listFile) {
if (file.isDirectory()) {
getFile(file);
} else {
if (file.getName().endsWith(".png")
|| file.getName().endsWith(".jpg")
|| file.getName().endsWith(".jpeg")
|| file.getName().endsWith(".gif")
|| file.getName().endsWith(".bmp")
|| file.getName().endsWith(".webp")) {
String temp = file.getPath().substring(0, file.getPath().lastIndexOf('/'));
if (!fileList.contains(temp))
fileList.add(temp);
}
}
}
}
return fileList;
}
public class MyGridAdapter extends BaseAdapter {
LayoutInflater inflater;
List<GridViewItem> items;
public MyGridAdapter() {
inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return 0;
}
@Override
public Object getItem(int position) {
return items.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.grid_item, null);
}
TextView text = (TextView) convertView.findViewById(R.id.textView);
text.setText(items.get(position).getPath());
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
Bitmap image = items.get(position).getImage();
if (image != null){
imageView.setImageBitmap(image);
}
else {
// If no image is provided, display a folder icon.
imageView.setImageResource(R.drawable.adele1);
}
return convertView;
}
}
}
答案 0 :(得分:0)
问题是你正在设置adapter
并试图获取图像,所以你的适配器没有得到图像的变化。
适配器中的数据从未设置List<GridViewItem> items
。
并且getCount
也应该返回不是&#34; 0&#34;
@Override
public int getCount() {
return items.size();
}
编辑:
这样做,
File root = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
getFile(root);
GridView imagegrid = (GridView) findViewById(R.id.gridview);
imagegrid.setAdapter(new MyGridAdapter());
在项目中添加Glide,将其添加到build.gradle文件中
compile 'com.github.bumptech.glide:glide:3.7.0'
像这样更改你的适配器getView,
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.grid_item, null);
}
TextView text = (TextView) convertView.findViewById(R.id.textView);
text.setText(fileList.get(position));
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
String imagePath = fileList.get(position);
Glide.with(imageGallery.this).load(imagePath).placeholder( R.drawable.adele1).into(imageView);
//if (image != null){
//imageView.setImageBitmap(image);
//}
//else {
// If no image is provided, display a folder icon.
//imageView.setImageResource(R.drawable.adele1);
//}
return convertView;
}
答案 1 :(得分:0)
我已经在这里https://stackoverflow.com/a/56111467/3904109回答了这个问题...但是是为了帮助那些有类似问题的人...
在我的Glide 4.8.0中,将以下内容添加到Glide加载到的ImageView小部件中可以达到目的,但这很奏效。...
android:background="?attr/selectableItemBackgroundBorderless"
或者也是
android:background="@drawable/R.drawable.yourResourceFile
或者也是
android:background="@android:color/transparent"