Android 从gridview中选择图像并全屏显示

Android 从gridview中选择图像并全屏显示,android,gridview,onitemclicklistener,Android,Gridview,Onitemclicklistener,我正在使用ion library()在gridview中显示手机中的图像和视频。我只需要在gridview中单击图像,然后在另一个活动中显示该图像。通常我会使用Integer[position]和getItem()全屏显示图像。但是当我使用离子库的时候,如何做到这一点呢 public class MainActivity extends Activity { private MyAdapter mAdapter; private GridView view; // Ad

我正在使用ion library()在
gridview
中显示手机中的图像和视频。我只需要在
gridview
中单击图像,然后在另一个活动中显示该图像。通常我会使用Integer[position]和
getItem()
全屏显示图像。但是当我使用离子库的时候,如何做到这一点呢

public class MainActivity extends Activity {
    private MyAdapter mAdapter;
    private GridView view;

    // Adapter to populate and imageview from an url contained in the array adapter
    public class MyAdapter extends ArrayAdapter<String> {
        public MyAdapter(Context context) {
            super(context, 0);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // see if we need to load more to get 40, otherwise populate the adapter
            if (position > getCount() - 4)
                loadMore();

            if (convertView == null)
                convertView = getLayoutInflater().inflate(R.layout.image, null);

            // find the image view
            final ImageView iv = (ImageView) convertView.findViewById(R.id.image);

            // select the image view
            Ion.with(iv)
            .centerCrop()
            .placeholder(R.drawable.placeholder)
            .error(R.drawable.error)
            .load(getItem(position));

            return convertView;
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Ion.getDefault(this).configure().setLogging("ion-sample", Log.DEBUG);

        setContentView(R.layout.activity_main);

        int cols = getResources().getDisplayMetrics().widthPixels / getResources().getDisplayMetrics().densityDpi * 2;
        view = (GridView) findViewById(R.id.results);
        view.setNumColumns(cols);
        mAdapter = new MyAdapter(this);
        view.setAdapter(mAdapter);

        loadMore();

        view.setOnItemClickListener(new OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this, mAdapter.getItem(position), Toast.LENGTH_SHORT).show();
                 // HERE I WANT TO GIVE THE INTENT TO DISPLAY IMAGE IN FULL SCREEN

            }  

        });
    }

    Cursor mediaCursor;
    public void loadMore() {
        if (mediaCursor == null) {
            mediaCursor = getContentResolver().query(MediaStore.Files.getContentUri("external"), null, null, null, null);
        }

        int loaded = 0;
        while (mediaCursor.moveToNext() && loaded < 10) {
            // get the media type. ion can show images for both regular images AND video.
            int mediaType = mediaCursor.getInt(mediaCursor.getColumnIndex(MediaStore.Files.FileColumns.MEDIA_TYPE));
            if (mediaType != MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE
                && mediaType != MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO) {
                continue;
            }

            loaded++;

            String uri = mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
            File file = new File(uri);
            // turn this into a file uri if necessary/possible
            if (file.exists())
                mAdapter.add(file.toURI().toString());
            else
                mAdapter.add(uri);
        }
    }
}
公共类MainActivity扩展活动{
私用MyAdapter mAdapter;
私有网格视图;
//用于从阵列适配器中包含的url填充和查看imageview的适配器
公共类MyAdapter扩展了ArrayAdapter{
公共MyAdapter(上下文){
超级(上下文,0);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
//查看是否需要加载更多以获得40,否则填充适配器
如果(位置>getCount()-4)
loadMore();
if(convertView==null)
convertView=GetLayoutFlater().充气(R.layout.image,null);
//查找图像视图
最终ImageView iv=(ImageView)convertView.findViewById(R.id.image);
//选择图像视图
离子与(iv)
.centerCrop()
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.加载(获取项目(位置));
返回视图;
}
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
getDefault(this.configure().setLogging(“离子样本”,Log.DEBUG);
setContentView(R.layout.activity_main);
int cols=getResources().getDisplayMetrics().widthPixels/getResources().getDisplayMetrics().densityDpi*2;
视图=(GridView)findViewById(R.id.results);
view.setNumColumns(cols);
mAdapter=新的MyAdapter(此);
view.setAdapter(mAdapter);
loadMore();
view.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//TODO自动生成的方法存根
Toast.makeText(MainActivity.this,mAdapter.getItem(position),Toast.LENGTH_SHORT.show();
//在这里,我想给出全屏显示图像的意图
}  
});
}
光标中光标;
public void loadMore(){
if(mediaCursor==null){
mediaCursor=getContentResolver().query(MediaStore.Files.getContentUri(“外部”),null,null,null,null);
}
加载int=0;
while(mediaCursor.moveToNext()&&loaded<10){
//获取媒体类型。ion可以显示常规图像和视频的图像。
int mediaType=mediaCursor.getInt(mediaCursor.getColumnIndex(MediaStore.Files.FileColumns.MEDIA_TYPE));
if(mediaType!=MediaStore.Files.FileColumns.MEDIA\u TYPE\u IMAGE
&&mediaType!=MediaStore.Files.FileColumns.MEDIA\u TYPE\u VIDEO){
继续;
}
加载++;
字符串uri=mediaCursor.getString(mediaCursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
文件=新文件(uri);
//如有必要/可能,将其转换为文件uri
if(file.exists())
add(file.toURI().toString());
其他的
mAdapter.add(uri);
}
}
}

在适配器中的getView()方法中设置转换视图的标记图像url。在那之后

 view.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(MainActivity.this, mAdapter.getItem(position), Toast.LENGTH_SHORT).show();
             Intent intent = new Intent(thisclass, toClass);
             intent.putExtra(view.getTag()); // pass the url to other activity
             startActivity(intent);

        }  

    });
view.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父级、视图、,
内部位置,长id){
//TODO自动生成的方法存根
Toast.makeText(MainActivity.this,mAdapter.getItem(position),Toast.LENGTH_SHORT.show();
意向意向=新意向(thisclass,toClass);
intent.putExtra(view.getTag());//将url传递给其他活动
星触觉(意向);
}  
});
在另一个活动中,从string extra获取url并从url加载图像

      view.setOnItemClickListener(new OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this, mAdapter.getItem(position), Toast.LENGTH_SHORT).show();
                 // HERE I WANT TO GIVE THE INTENT TO DISPLAY IMAGE IN FULL SCREEN

            Intent i = new Intent(MainActivity.this, FullScreenViewActivity.class);
            i.putExtra("fullimagepath", mAdapter.get(position));
            MainActivity.this.startActivity(i);

            }  
  • 您的活动应该实现AdapterView.OnItemClickListener

  • 在网格视图上添加项单击侦听器

    view.setOnItemClickListener(this);
    
  • 从网格视图中获取所选图像,并在另一个活动中全屏打开它:

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String imageUrl = (String) parent.getItemAtPosition(position);
        Intent intent = new Intent(MainActivity.this, FullScreenImageActivity.class);
        intent.putExtra("IMAGE_URL", imageUrl); 
        startActivity(intent);
    }
    

  • 别忘了在menifest中提及FullScreenViewActivity。非常感谢您的解释。但是,请您提一下,您在FullScreenViewActivity中的“职位”是从哪里获得的@SohailI添加了
    String s=getIntent().getStringExtra(“fullimagepath”);Ion.with(fullImage).centerCrop().placeholder(R.drawable.placeholder).error(R.drawable.error).load(getItem(s))但是我得到了“方法getItemString是未定义的错误”@Sohail.load(getItem(s));至.装载(s);;我不知道为什么,但我在全屏视图活动课上得到了一个空白屏幕。没有图像显示。有什么原因吗@苏海尔。
    
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        String imageUrl = (String) parent.getItemAtPosition(position);
        Intent intent = new Intent(MainActivity.this, FullScreenImageActivity.class);
        intent.putExtra("IMAGE_URL", imageUrl); 
        startActivity(intent);
    }
    
    String imageUrl = getIntent().getStringExtra("IMAGE_URL");
    // Load image