【问题标题】:Save ImageView to sdcard android将 ImageView 保存到 sdcard android
【发布时间】:2015-09-27 18:51:24
【问题描述】:

我想保存一个ImageView,我用setImageURI 在我的android 设备中的SDcard 中显示...

我怎样才能做到这一点?

代码:

public class MainActivity extends ActionBarActivity {

ImageView imageView;

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

    imageView = (ImageView) findViewById(R.id.imageView);

    imageView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Image"), 1);
        }
    });
}

@Override
protected void onActivityResult(int reqCode, int resCode, Intent data) {
    if(resCode == RESULT_OK){
        if(reqCode == 1)
            imageView.setImageURI(data.getData());
    }
}

提前致谢。

【问题讨论】:

标签: java android image imageview


【解决方案1】:
public class FileCache {

private File cacheDir;

public FileCache(Context context){
    //Find the dir to save cached images
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
        cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"TempImages");
    else
        cacheDir=context.getCacheDir();
    if(!cacheDir.exists())
        cacheDir.mkdirs();
}

public File getFile(String url) //url =http://image address
{
    String filename=String.valueOf(url.hashCode());
    File f = new File(cacheDir, filename);
    return f;

}

public void clear(){
    File[] files=cacheDir.listFiles();
    if(files==null)
        return;
    for(File f:files)
        f.delete();
}

}

【讨论】:

    【解决方案2】:

    使用以下方法将其保存到 SdCard:

    @Override
    protected void onActivityResult(int reqCode, int resCode, Intent data) {
        if(resCode == RESULT_OK){
            if(reqCode == 1)
                imageView.setImageURI(data.getData());
                Bitmap bm=((BitmapDrawable)imageView.getDrawable()).getBitmap();
                saveImageFile(bm);
        }
    }
    
        public String saveImageFile(Bitmap bitmap) {
                FileOutputStream out = null;
                String filename = getFilename();
                try {
                    out = new FileOutputStream(filename);
                    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                }
                return filename;
            }
    
            private String getFilename() {
                File file = new File(Environment.getExternalStorageDirectory()
                        .getPath(), "TestFolder");
                if (!file.exists()) {
                    file.mkdirs();
                }
                String uriSting = (file.getAbsolutePath() + "/"
                        + System.currentTimeMillis() + ".jpg");
                return uriSting;
            }
    

    【讨论】:

    • 非常感谢兄弟 :) 无论如何,为什么 TestFolder 没有显示在画廊中?但是,它显示在文件管理器中
    • 要在图库中显示,您需要在上述解决方案中添加更多代码。
    【解决方案3】:

    试试这个,在 onActivityResult 中

    Uri imageUri = data.getData();
            Bitmap bmp = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
    
    FileOutputStream out = null;
    try {
        out = new FileOutputStream(filename);
        bmp.compress(Bitmap.CompressFormat.PNG, 100, out);     
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (out != null) {
                out.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-28
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多