当前位置: 代码迷 >> Android >> 在智能手机图像查看器中从GridView单击时显示图像
  详细解决方案

在智能手机图像查看器中从GridView单击时显示图像

热度:57   发布时间:2023-08-04 11:56:33.0

我创建了一个Android应用程序,用于在gridview中显示在线图像。 该应用程序运行正常,并且图像显示在GridView中。 问题是当我们单击GridView中的特定图像时,我想在默认图像查看器中显示图像。

可以请给我一些建议吗

我的代码如下

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        setContentView(R.layout.activity_main);

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

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                Intent mInDisplay = new Intent(MainActivity.this, MainActivity.class);
                // how to show the selected image in default image viewer
            }
        });
    }

    public class ImageAdapter extends BaseAdapter {
        /** The parent context */
        private Context myContext;

        /** URL-Strings to some remote images. */
        private String[] myRemoteImages = {
                "http://www.example.com/uploads/gallery/sample1.jpg",
                "http://www.example.com//uploads/gallery/sample2.jpg",
                "http://www.example.com//uploads/gallery/sample3.jpg",
                "http://www.example.com//uploads/gallery/sample4.jpg",
                "http://www.example.com//uploads/gallery/sample5.jpg",
                "http://www.example.com//uploads/gallery/sample6.jpg",
                "http://www.example.com//uploads/gallery/sample7.jpg",
                "http://www.example.com//uploads/gallery/sample8.jpg",
                "http://www.example.com//uploads/gallery/sample9.jpg" };

        /** Simple Constructor saving the 'parent' context. */
        public ImageAdapter(Context c) {
            this.myContext = c;
        }

        /** Returns the amount of images we have defined. */
        public int getCount() {
            return this.myRemoteImages.length;
        }

        /* Use the array-Positions as unique IDs */
        public Object getItem(int position) {
            return position;
        }

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

        /**
         * Returns a new ImageView to be displayed, depending on the position
         * passed.
         */
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView i = new ImageView(this.myContext);

            try {
                /* Open a new URL and get the InputStream to load data from it. */
                URL aURL = new URL(myRemoteImages[position]);
                URLConnection conn = aURL.openConnection();
                conn.connect();
                InputStream is = conn.getInputStream();
                /* Buffered is always good for a performance plus. */
                BufferedInputStream bis = new BufferedInputStream(is);
                /* Decode url-data to a bitmap. */
                Bitmap bm = BitmapFactory.decodeStream(bis);
                bis.close();
                is.close();
                /* Apply the Bitmap to the ImageView that will be returned. */
                i.setImageBitmap(bm);
            } catch (IOException e) {
                i.setImageResource(R.drawable.ic_launcher);
                Log.e("DEBUGTAG", "Remtoe Image Exception", e);
            }

            /* Image should be scaled as width/height are set. */
            i.setScaleType(ImageView.ScaleType.FIT_CENTER);
            /* Set the Width/Height of the ImageView. */
            i.setLayoutParams(new GridView.LayoutParams(150, 150));
            return i;
        }

        /**
         * Returns the size (0.0f to 1.0f) of the views depending on the
         * 'offset' to the center.
         */
        public float getScale(boolean focused, int offset) {
            /* Formula: 1 / (2 ^ offset) */
            return Math.max(0, 1.0f / (float) Math.pow(2, Math.abs(offset)));
        }
    }
}

要通过默认图像查看器显示图像,您需要将图像存储在设备中。

因此,我建议您将图像保存在本地(可能是临时的),然后使用ACTION_VIEW打开一个意图。

保存位图( ):

    private String saveToInternalSorage(Bitmap bitmapImage){
            ContextWrapper cw = new ContextWrapper(getApplicationContext());
             // path to /data/data/yourapp/app_data/imageDir
            File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
            // Create imageDir
            File mypath=new File(directory,"profile.jpg");

            FileOutputStream fos = null;
            try {           

                fos = new FileOutputStream(mypath);

           // Use the compress method on the BitMap object to write image to the OutputStream
                bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return directory.getAbsolutePath();
    }

要查看您的图像:

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("thePathReturnedFromPreviousMethod"), "image/*");
startActivity(intent);