保存图像视图

时间:2015-08-06 01:32:18

标签: android imageview

有人可以帮助我了解如何在此代码中使用OnPause()OnResume()吗?我正在尝试在imageView中保存最后一个选定或捕获的图像,因此当用户关闭程序并再次返回时,他不需要再次设置或拍摄图像。

package com.example.thang.sdcardimagesactivity;

public class MainActivity extends Activity {

private static final int REQUEST_CODE = 1;
private Bitmap bitmap;
Button button;
ImageView imageView;
String selectedImagePath;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button=(Button) findViewById(R.id.click);
    imageView=(ImageView) findViewById(R.id.image);
    imageView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Switch();
            return true;
        }
    });
}
public void Switch(){
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent,"Select Picture"), REQUEST_CODE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode==REQUEST_CODE&&resultCode== Activity.RESULT_OK){
        try{
            Uri selectedImage = data.getData();
            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String filePath = cursor.getString(columnIndex);
            Log.v("roni", filePath);
            cursor.close();
            if(bitmap != null && !bitmap.isRecycled())
            {
                bitmap = null;
            }
            bitmap = BitmapFactory.decodeFile(filePath);
            //imageView.setBackgroundResource(0);
            imageView.setImageBitmap(bitmap);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);};

@Override
protected void onPause() {
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 1); // Open SharedPreferences with name AppSharedPref
    SharedPreferences.Editor editor = sp.edit();
    editor.putString("ImagePath", selectedImagePath); // Store selectedImagePath with key "ImagePath". This key will be then used to retrieve data.
    editor.commit();
    super.onPause();
}

@Override
protected void onResume() {
    SharedPreferences sp = getSharedPreferences("AppSharedPref", 1);
    selectedImagePath = sp.getString("ImagePath", "");
    Bitmap myBitmap = BitmapFactory.decodeFile(selectedImagePath);
    imageView.setImageBitmap(myBitmap);
    super.onResume();
}
}

View Activity


public class ViewActivity extends Activity {
ImageButton imageViews;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view);
    imageViews = (ImageButton) findViewById(R.id.image);
    //   textView=(TextView) findViewById(R.id.textview);
    Intent intent = getIntent();
    Uri data = intent.getData();

    if (intent.getType().indexOf("image/") != -1)
    {
        imageViews.setImageURI(data);
    }
    setResult(RESULT_OK, intent);
    Bundle bundle=new Bundle();
    bundle.putInt("image",R.id.image);
    intent.putExtras(bundle);
    finish();
}
    public String getPath(Uri uri) {
        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        return cursor.getString(column_index);
    }
}

1 个答案:

答案 0 :(得分:0)

您可以将图像保存到SD卡,以便永久访问它。最好立即在onActivityResult()方法中执行此操作。

File imagesFolder = new File(Environment.getExternalStorageDirectory(), "ImagesFolder");
File file = new File(imagesFolder, "image.jpg");
String fileName = file.getAbsolutePath();
try {
    FileOutputStream out = new FileOutputStream(file);
    squareBitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
    out.flush();
    out.close();
} catch (Exception e) {
    Log.e("Image", "Convert");
}

并在重新启动应用程序时加载它(在onCreate中或最好在onResume中):

try {
    File imagesFolder = new File(Environment.getExternalStorageDirectory(), "ImagesFolder");
    if (!imagesFolder.exists())
        imagesFolder.mkdirs();
    if (new File(imagesFolder, "image.jpg").exists()) {
        String fileName = new File(imagesFolder, "image.jpg").getAbsolutePath();
        Bitmap bitmap = BitmapFactory.decodeFile(fileName);
        ImageView imageView = (ImageView) findViewById(R.id.image_view);
        imageView.setImageBitmap(bitmap);
    }
} catch (NullPointerException e) {
    Log.e("Exception", "null");
}

当然,您可以更改文件夹和图像名称。