В качестве первого шага вам нужно получить растровое изображение из imageButton
, например,
Bitmap bitmap = ((BitmapDrawable)imageButton.getDrawable()).getBitmap();
Затем вам нужно сохранить это растровое изображение во внешнем хранилище, например,
private void saveBitmap(Bitmap bm){
File file = Environment.getExternalStorageDirectory();
File newFile = new File(file, "myImage.jpg");
try {
FileOutputStream fileOutputStream = new FileOutputStream(newFile);
bm.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.flush();
fileOutputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
* 1007. * И вы загружаете это сохраненное растровое изображение следующим образом
private void loadImageFromStorage(String path)
{
try {
File f=new File(path, "myImage.jpg");
Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f));
imageButton.setImageBitmap(b);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
Вы должны определить путь к изображению следующим образом
String photoPath = Environment.getExternalStorageDirectory() + "/myImage.jpg";
Это основная идея, вы можете добавить немного аромата в этокод, установив изображение по умолчанию, когда нет доступных сохраненных изображений.
Надеюсь, это то, что вы ищете.
ОБНОВЛЕНИЕ:
Вам нужно изменить эту строку
Bitmap bitmap = ((BitmapDrawable)imageButton.getDrawable()).getBitmap();
К этому
Drawable myDrawable = imageButton.getBackground();
После этого вы преобразуете Drawable
в Bitmap
Bitmap bitmap = drawableToBitmap(myDrawable);
Вот функция для этого преобразования
public static Bitmap drawableToBitmap (Drawable drawable) {
Bitmap bitmap = null;
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
if(bitmapDrawable.getBitmap() != null) {
return bitmapDrawable.getBitmap();
}
}
if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
ОБНОВЛЕНИЕ 2:
Вам необходимо запросить разрешения во время выполнения для сохранения и получения изображений Сначала вам нужно добавить это в свой файл манифеста
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
Затем добавьте этот метод вваша деятельность
public static boolean hasPermissions(Context context, String... permissions)
{
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M && context!=null && permissions!=null){
for(String permission: permissions){
if(ActivityCompat.checkSelfPermission(context, permission)!= PackageManager.PERMISSION_GRANTED){
return false;
}
}
}
return true;
}
Наконец в вашем onCreate
добавьте эти строки
int Permission_All = 1;
String[] Permissions = {Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if(!hasPermissions(this, Permissions)){
ActivityCompat.requestPermissions(this, Permissions, Permission_All);
}