0

我正在制作一个画廊,我在其中从资产文件夹加载(在运行时)图像。现在我想在点击事件时将图像保存到 SD 卡。

例如: 当应用程序启动时,用户看到图像,他们可以滚动浏览图像并查看它们(这部分完成)。问题是图片在我自己的画廊视图中动态加载。我没有硬编码它们。

我想把它保存到 SD 卡上。但我没有图像的硬编码路径。可以有任意数量的图像。

 private void CopyAssets() {
        AssetManager assetManager = getAssets();
        InputStream in=null;
    String[] files = null;
        try {
            files = assetManager.list("image");
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        for(String filename : files) {


                try {
                    in = assetManager.open(filename);
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
        try {
                String dirName = Environment.getExternalStorageDirectory().toString(); 
                File newFile = new File(dirName); 
                newFile.mkdirs(); 

        OutputStream out = new FileOutputStream(newFile);
        System.out.println("in tryyyy");

                copyFile(in, out);
                in.close();
                in = null;
                out.flush();
                out.close();
                out = null;
            } catch(Exception e) {
                Log.e("tag", e.getMessage());
        }

我尝试了上述方法,我不想将所有图像复制到 SD 卡。但只有用户从画廊中选择的那个太动态了。因为会有很多图像。对每个图像路径进行硬编码将很困难。

Android中是否有任何方法可以获取字符串中的当前图像路径或URI?是什么View v = this.getCurrentFocus();?它返回什么?

4

2 回答 2

0

GalleryAdapterView扩展而来,就像在 adapterView 上一样,您可以在选择项目时添加侦听器。

如果您知道选择了哪个项目,请使用它来将您想要的图像复制到 SD 卡。

为了更好地理解如何为 adapterView 实现适配器,请观看“ listView 的世界”视频。您可能希望将路径放入 viewHolder(取决于您的代码和设计)。

于 2012-08-18T08:20:39.820 回答
0

这是我创建的一种方法,可让您将图像(位图)保存到内存中。参数需要一个位图对象和该对象的文件名。

public void writeBitmapToMemory(String filename, Bitmap bitmap) {
        FileOutputStream fos;
        // Use the compress method on the Bitmap object to write image to the OutputStream
        try {
            fos = this.openFileOutput(filename, Context.MODE_PRIVATE);
            // Writing the bitmap to the output stream
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();

        } 
        catch (FileNotFoundException e) {
            e.printStackTrace();


        } 
        catch (IOException e) {
            e.printStackTrace();


        }

    }

我希望这有帮助。

于 2012-08-18T08:25:34.310 回答