Android 使GridView从特定文件夹拍摄图像
我是android应用程序制作的新手,我还是一个有点知识的初学者。我一直在尝试制作一款android应用程序,它的工作原理类似于画廊,但它只在特定文件夹下显示图像。对于UI,我只从一个Android 使GridView从特定文件夹拍摄图像,android,image,gridview,uri,listadapter,Android,Image,Gridview,Uri,Listadapter,我是android应用程序制作的新手,我还是一个有点知识的初学者。我一直在尝试制作一款android应用程序,它的工作原理类似于画廊,但它只在特定文件夹下显示图像。对于UI,我只从一个GridView(或者从后者派生的TwoWayGridView)开始,并且一直试图让这个GridView从这个文件夹获取其内容 我创建了此文件夹并将图像复制到其中进行测试,但失败。没有显示图像。另外,我对光标和列表适配器不是很熟悉。有些我确信是正确的事情是权限、清单和活动的布局。此外,我相信我的问题是关于URIs。
GridView
(或者从后者派生的TwoWayGridView
)开始,并且一直试图让这个GridView
从这个文件夹获取其内容
我创建了此文件夹并将图像复制到其中进行测试,但失败。没有显示图像。另外,我对光标
和列表适配器
不是很熟悉。有些我确信是正确的事情是权限、清单和活动的布局。此外,我相信我的问题是关于URI
s。请在下面检查我的代码:
一些名称:
Uri contentUri;
Cursor mImageCursor;
TwoWayGridView mImageGrid;
ListAdapter mAdapter;
String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
File motherDirectory = new File(sdCard+"/Favory");
if(!motherDirectory.exists()){
motherDirectory.mkdir();
}
MediaScannerConnection.scanFile(this, new String[]{motherDirectory.getAbsolutePath()} ,null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub
contentUri = uri ;
initGrid(uri);
}
});
}
private void initGrid(Uri folderUri) {
mImageCursor = this.getContentResolver().query(folderUri,
ImageThumbnailAdapter.IMAGE_PROJECTION, null, null,
MediaStore.Images.ImageColumns.DISPLAY_NAME);
mImageGrid = (TwoWayGridView) findViewById(R.id.gridview);
mAdapter = new ImageThumbnailAdapter(this, mImageCursor);
mImageGrid.setAdapter(mAdapter);
mImageGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(TwoWayAdapterView<?> parent, View v, int position, long id) {
Log.i(TAG, "showing image: " + mImageCursor.getString(ImageThumbnailAdapter.IMAGE_NAME_COLUMN));
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
}
onCreate方法:
Uri contentUri;
Cursor mImageCursor;
TwoWayGridView mImageGrid;
ListAdapter mAdapter;
String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
File motherDirectory = new File(sdCard+"/Favory");
if(!motherDirectory.exists()){
motherDirectory.mkdir();
}
MediaScannerConnection.scanFile(this, new String[]{motherDirectory.getAbsolutePath()} ,null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub
contentUri = uri ;
initGrid(uri);
}
});
}
private void initGrid(Uri folderUri) {
mImageCursor = this.getContentResolver().query(folderUri,
ImageThumbnailAdapter.IMAGE_PROJECTION, null, null,
MediaStore.Images.ImageColumns.DISPLAY_NAME);
mImageGrid = (TwoWayGridView) findViewById(R.id.gridview);
mAdapter = new ImageThumbnailAdapter(this, mImageCursor);
mImageGrid.setAdapter(mAdapter);
mImageGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(TwoWayAdapterView<?> parent, View v, int position, long id) {
Log.i(TAG, "showing image: " + mImageCursor.getString(ImageThumbnailAdapter.IMAGE_NAME_COLUMN));
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
}
initGrid(Uri)方法:
Uri contentUri;
Cursor mImageCursor;
TwoWayGridView mImageGrid;
ListAdapter mAdapter;
String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gallery);
File motherDirectory = new File(sdCard+"/Favory");
if(!motherDirectory.exists()){
motherDirectory.mkdir();
}
MediaScannerConnection.scanFile(this, new String[]{motherDirectory.getAbsolutePath()} ,null, new MediaScannerConnection.OnScanCompletedListener() {
@Override
public void onScanCompleted(String path, Uri uri) {
// TODO Auto-generated method stub
contentUri = uri ;
initGrid(uri);
}
});
}
private void initGrid(Uri folderUri) {
mImageCursor = this.getContentResolver().query(folderUri,
ImageThumbnailAdapter.IMAGE_PROJECTION, null, null,
MediaStore.Images.ImageColumns.DISPLAY_NAME);
mImageGrid = (TwoWayGridView) findViewById(R.id.gridview);
mAdapter = new ImageThumbnailAdapter(this, mImageCursor);
mImageGrid.setAdapter(mAdapter);
mImageGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(TwoWayAdapterView<?> parent, View v, int position, long id) {
Log.i(TAG, "showing image: " + mImageCursor.getString(ImageThumbnailAdapter.IMAGE_NAME_COLUMN));
Uri uri = ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
});
}
private void initGrid(Uri folderUri){
mImageCursor=this.getContentResolver().query(folderUri,
ImageThumbnailAdapter.IMAGE_投影,null,null,
MediaStore.Images.ImageColumns.DISPLAY_NAME);
mImageGrid=(双向gridview)findViewById(R.id.gridview);
mAdapter=新的ImageThumbnailAdapter(此为mImageCursor);
设置适配器(mAdapter);
setOnItemClickListener(新的OnItemClickListener(){
public void onItemClick(双向适配器视图父视图、视图v、整型位置、长id){
Log.i(标记,“显示图像:”+mImageCursor.getString(ImageThumbnailAdapter.image\u NAME\u列));
Uri Uri=ContentURI.withAppendedId(MediaStore.Images.Media.EXTERNAL\u CONTENT\u Uri,id);
意图=新意图(Intent.ACTION\u视图,uri);
星触觉(意向);
}
});
}
谢谢你的帮助,如果有更简单的替代方法,请告诉我,我现在更关心结果而不是方法。如果您需要任何信息,请在下面的评论中告诉我。再次感谢 要读取文件夹的文件,可以使用此功能(从post):
有关如何使用此库的更多信息,您可以查看示例,其中有一个示例使用grid view gridView来读取文件夹的文件,您可以使用此功能(从post):
有关如何使用此库的更多信息,您可以查看示例,其中有一个使用grid view gridView的示例此方法是递归的吗?此方法是递归的吗?