我如何通过点击Android的列表视图中打开图像? [英] How do i open an image by clicking on a listview in android?

查看:316
本文介绍了我如何通过点击Android的列表视图中打开图像?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以,这里的东西。我想尝试一下。所以,我写了这个程序,查找图像在我的MNT /共享/ Newpictures文件夹(.JPG)扩展在我GennyMotion模拟器。在我的计划,我拍摄的,在一个String数组适配器jpg扩展,并在文件路径字符串数组的文件路径文件名。现在,这里是我是空白的部分,我有路径,名称,我可以通过点击列表中得到的位置。但我怎么打开图像时,我一下就行了。我在网上研究和大部分codeS的太混乱。所以,可能是有人可以建议我一个简单的方法。这是我试过至今。谢谢你。

 包com.example.user.imageapp;进口android.app.Activity;
进口android.content.Intent;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.AdapterView;
进口android.widget.ArrayAdapter;
进口android.widget.Button;
进口android.widget.ListView;进口的java.io.File;
进口的java.util.ArrayList;/ **
 *创建用户在2015年6月8日。
 * /
公共类飞溅延伸活动{
    按键负荷;
    字符串s;
    私人的ListView mainList;
    私有String [] FilePathStrings;    ArrayList的<串GT; filesinFolder =的GetFiles(到/ mnt /共享/ NewPictures);    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.splash);
      //负荷=(按钮)findViewById(R.id.Load);
        mainList =(ListView控件)findViewById(R.id.imagelist);
        ArrayAdapter<串GT;适配器=新ArrayAdapter<串GT;(这一点,android.R.layout.simple_list_item_1,filesinFolder);        mainList.setAdapter(适配器);        mainList.setOnItemClickListener(新AdapterView.OnItemClickListener(){
            @覆盖
            公共无效onItemClick(适配器视图<>适配器视图,视图观点,INT I,长L){
              //我该怎么把这里
            }
        });
    }
    公众的ArrayList<串GT;的GetFiles(字符串目录路径)
    {
        ArrayList的<串GT; MYFILES =新的ArrayList<串GT;();
        文件f =新的文件(目录);
        f.mkdirs();        文件[] =文件f.listFiles();        FilePathStrings =新的String [files.length]        的for(int i = 0; I< files.length;我++){
            //获取图像文件的路径
            如果(文件[I] .getName()。包含(JPG)){
                FilePathStrings [I] =文件[I] .getAbsolutePath();
                //获取名称图像文件
                MyFiles.add(文件[I] .getName());            }
        }        返回MYFILES;
    }
}


解决方案

下面是简单的例子,你如何可以通过点击查看GridView的形象,但你可以在XML文件更改为列表视图。

这是gridview的显示。

GridViewActivity.java

 公共类GridViewActivity延伸活动{    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.gridview);        GridView控件的GridView =(GridView控件)findViewById(R.id.gridview);
        gridview.setAdapter(新ImageAdapter(GridViewActivity.this));        gridview.setOnItemClickListener(新AdapterView.OnItemClickListener(){
            公共无效onItemClick(适配器视图<>母公司,视图V,INT位置,长的id){
                //发送意图SingleViewActivity
                意图I =新意图(getApplicationContext(),SingleViewActivity.class);                //传递图像索引
                i.putExtra(ID,位置);
                startActivity(ⅰ);
            }
        });
    }
}

这个类将在单页显示的图像。

SingleViewActivity.java

 公共类SingleViewActivity延伸活动{    ImageLoader的ImageLoader的= ImageLoader.getInstance();
    私人DisplayImageOptions选择;    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.single_view);        选项​​=新DisplayImageOptions.Builder()。cacheInMemory(真)
                .cacheOnDisk(真).considerExifParams(真)
                .showImageForEmptyUri(R.mipmap.ic_launcher)
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
                .bitmapConfig(Bitmap.Config.RGB_565).build();        //获取数据的意图
        意向I = getIntent();        //选择图片ID
        。INT位置= i.getExtras()调用getInt(ID);
        ImageAdapter imageAdapter =新ImageAdapter(本);        ImageView的ImageView的=(ImageView的)findViewById(R.id.SingleView);
        //imageView.setImageResource(imageAdapter.mThumbnames[position]);
        imageLoader.displayImage(imageAdapter.mThumbnames [位置],ImageView的,期权);
    }
}

我已经从互联网上使用了一些随机图像。同样的概念在列表视图用于显示图像。

ImageAdapter.java

 公共类ImageAdapter延伸BaseAdapter {    私人语境mContext;
    私人LayoutInflater layoutInflater;
    ImageLoader的ImageLoader的= ImageLoader.getInstance();
    私人DisplayImageOptions选择;    //构造
    公共ImageAdapter(上下文C){
        mContext = C;
        layoutInflater = LayoutInflater.from(mContext);
        选项​​=新DisplayImageOptions.Builder()。cacheInMemory(真)
                .cacheOnDisk(真).considerExifParams(真)
                .showImageForEmptyUri(R.mipmap.ic_launcher)
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
                .bitmapConfig(Bitmap.Config.RGB_565).build();
    }    公众诠释的getCount(){
        返回mThumbnames.length;
    }    公共整数的getItem(INT位置){
        返回的位置;
    }    众长getItemId(INT位置){
        返回的位置;
    }    @覆盖
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){        ViewHolder1持有人;
        如果(convertView == NULL){
            convertView = layoutInflater.inflate(R.layout.grideview_item,NULL);
            持有人=新ViewHolder1();
            holder.image =(ImageView的)convertView.findViewById(R.id.imageView);
            convertView.setTag(保持器);
        }其他{
            支架=(ViewHolder1)convertView.getTag();
        }
        //加载图像,德code将其以位图,并在ImageView的显示位图(或任何其他视图
        //它实现ImageAware接口)        //imageLoader.displayImage(\"drawable://+ mThumbIds [位置],holder.image);
        imageLoader.displayImage(mThumbnames [位置],holder.image,期权);
        //holder.image.setImageDrawable(mContext.getResources().getDrawable(mThumbIds[position]));
        返回convertView;
    }    公共静态类ViewHolder1 {
        ImageView的形象;
    }    //请阵列中的所有图片
   / *公共整数[] = mThumbIds {
            R.drawable.ab,R.drawable.ac,
            R.drawable.ad,R.drawable.ae    }; * /
    公众的String [] = mThumbnames {
            http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg
            http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg
            http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg
            http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg
            http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg
            http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg
            http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg
            http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg    };
}

gridview_item.xml

 <?XML版本=1.0编码=UTF-8&GT?;
    <的FrameLayout的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    机器人:layout_width =match_parent
    机器人:layout_height =WRAP_CONTENT
    机器人:layout_gravity =CENTER_HORIZONTAL>    < ImageView的
        机器人:ID =@ + ID / ImageView的
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:layout_gravity =左
        机器人:paddingBottom会=5DP
        机器人:paddingLeft =5DP
        机器人:paddingRight =5DP
        机器人:paddingTop =10dp
        机器人:scaleType =fitXY/>    <的TextView
        机器人:ID =@ + ID / textView2
        机器人:layout_width =match_parent
        机器人:layout_height =30dp
        机器人:layout_gravity =中心|底
        机器人:layout_marginBottom =5dip
        机器人:背景=#8000
        机器人:比重=中心
        机器人:文字=图像
        机器人:文字颜色=#000000
        机器人:TEXTSIZE =20dp/>
< /&的FrameLayout GT;

So, here is the thing. I wanted to experiment a bit. So, i wrote this program which looks for images with (.jpg) extension in my mnt/shared/Newpictures folder in my GennyMotion Emulator. In my program, i captured the name of the files with .jpg extension in a String array adapter and the file path in a filepath string array. Now, here is the part where i am blank, i have the path,name and i can get the position by clicking on the list. But how do i open the image when i click on the list. I researched online and most of the codes were too confusing. So, may be someone can suggest me an easier approach. This is what i tried so far. Thanks.

package com.example.user.imageapp;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import java.io.File;
import java.util.ArrayList;

/**
 * Created by user on 06-08-2015.
 */


public class Splash extends Activity {
    Button load;
    String s;
    private ListView mainList;
    private String[] FilePathStrings;

    ArrayList<String>filesinFolder = GetFiles("/mnt/shared/NewPictures");



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
      //  load = (Button)findViewById(R.id.Load);
        mainList = (ListView) findViewById(R.id.imagelist);
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,filesinFolder );

        mainList.setAdapter(adapter);

        mainList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
              //what do i put here


            }
        });




    }


    public ArrayList<String> GetFiles(String DirectoryPath)
    {
        ArrayList<String> MyFiles = new ArrayList<String>();
        File f = new File(DirectoryPath);
        f.mkdirs();

        File[] files = f.listFiles();

        FilePathStrings = new String[files.length];

        for (int i = 0; i < files.length; i++) {
            // Get the path of the image file
            if(files[i].getName().contains(".jpg")) {
                FilePathStrings[i] = files[i].getAbsolutePath();
                // Get the name image file
                MyFiles.add(files[i].getName());

            }
        }



        return MyFiles;


    }
}

解决方案

Here is simple example, how you can view image by click on gridview but you can change to listview in xml file.

This is gridview display.

GridViewActivity.java

public class GridViewActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.gridview);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(new ImageAdapter(GridViewActivity.this));

        gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                // Send intent to SingleViewActivity
                Intent i = new Intent(getApplicationContext(), SingleViewActivity.class);

                // Pass image index
                i.putExtra("id", position);
                startActivity(i);
            }
        });
    }
}

This class will display image in single page.

SingleViewActivity.java

public class SingleViewActivity extends Activity {

    ImageLoader imageLoader = ImageLoader.getInstance();
    private DisplayImageOptions options;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.single_view);

        options = new DisplayImageOptions.Builder().cacheInMemory(true)
                .cacheOnDisk(true).considerExifParams(true)
                .showImageForEmptyUri(R.mipmap.ic_launcher)
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
                .bitmapConfig(Bitmap.Config.RGB_565).build();

        // Get intent data
        Intent i = getIntent();

        // Selected image id
        int position = i.getExtras().getInt("id");
        ImageAdapter imageAdapter = new ImageAdapter(this);

        ImageView imageView = (ImageView) findViewById(R.id.SingleView);
        //imageView.setImageResource(imageAdapter.mThumbnames[position]);
        imageLoader.displayImage(imageAdapter.mThumbnames[position],imageView,options);
    }
}

i have used some random images from internet. This same concept is used in listview for displaying image.

ImageAdapter.java

public class ImageAdapter extends BaseAdapter {

    private Context mContext;
    private LayoutInflater layoutInflater;
    ImageLoader imageLoader = ImageLoader.getInstance();
    private DisplayImageOptions options;

    // Constructor
    public ImageAdapter(Context c) {
        mContext = c;
        layoutInflater = LayoutInflater.from(mContext);
        options = new DisplayImageOptions.Builder().cacheInMemory(true)
                .cacheOnDisk(true).considerExifParams(true)
                .showImageForEmptyUri(R.mipmap.ic_launcher)
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2)
                .bitmapConfig(Bitmap.Config.RGB_565).build();
    }

    public int getCount() {
        return mThumbnames.length;
    }

    public Integer getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder1 holder;
        if (convertView == null) {
            convertView = layoutInflater.inflate(R.layout.grideview_item, null);
            holder = new ViewHolder1();
            holder.image = (ImageView) convertView.findViewById(R.id.imageView);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder1) convertView.getTag();
        }


        // Load image, decode it to Bitmap and display Bitmap in ImageView (or any other view
        //  which implements ImageAware interface)

        //imageLoader.displayImage("drawable://" + mThumbIds[position], holder.image);
        imageLoader.displayImage(mThumbnames[position], holder.image, options);
        //holder.image.setImageDrawable(mContext.getResources().getDrawable(mThumbIds[position]));
        return convertView;
    }

    public static class ViewHolder1 {
        ImageView image;
    }

    // Keep all Images in array
   /* public Integer[] mThumbIds = {
            R.drawable.ab, R.drawable.ac,
            R.drawable.ad, R.drawable.ae

    };*/
    public String[] mThumbnames = {
            "http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg",
            "http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg",
            "http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg",
            "http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg",
            "http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg",
            "http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg",
            "http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg",
            "http://cdn2.ubergizmo.com/wp-content/uploads/2012/05/android_lock.jpg"

    };
}

gridview_item.xml

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:paddingBottom="5dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:paddingTop="10dp"
        android:scaleType="fitXY" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_gravity="center|bottom"
        android:layout_marginBottom="5dip"
        android:background="#80000000"
        android:gravity="center"
        android:text="images"
        android:textColor="#000000"
        android:textSize="20dp" />
</FrameLayout>

这篇关于我如何通过点击Android的列表视图中打开图像?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆