Установить изображение галереи в качестве фона кнопки

У меня есть кнопка в моем коде, чтобы сделать снимок:

<Button
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:background="@drawable/cameralogo"

            android:id="@+id/buttonCamera" />

Когда я нажимаю на нее, открывается камера и сохраняется изображение, путь — String mCurrentPhotoPath;

после отображения намерения камеры я хочу, чтобы кнопка отображала изображение в качестве фона (android:background="mCurrent.....")???

как это сделать?


person Jonas    schedule 21.10.2014    source источник


Ответы (3)


Вот решение.

Вы не можете установить фон только по пути или URI, вам нужно создать Bitmap (и использовать ImageButton) или Drawable из него.

Использование Bitmap и ImageButton:

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
yourImageButton.setImageBitmap(bitmap);

Используя Drawable и кнопку:

Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), imageUri);
Drawable d = new BitmapDrawable(getResources(),bitmap);
yourButton.setBackground(d);
person Nativ    schedule 21.10.2014
comment
Да, вам нужно использовать его в действии или использовать экземпляр Context: context.getContentResolver(). Кстати, если вы найдете мое решение полезным, пожалуйста, оцените его :-) - person Nativ; 21.10.2014

Вы уже рассматривали этот вопрос? Как установить фоновое изображение кнопки с помощью кода

Вы не можете сделать это в xml, а только программно. Просто получите ссылку на вновь созданное изображение, как описано здесь: Как получить путь к захваченному изображению в Android

person D4ngle    schedule 21.10.2014

Чтобы запустить намерение камеры:

...
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
activity.startActivityForResult(takePictureIntent, PHOTO_ACTIVITY_REQUEST_CODE);
...

Где PHOTO_ACTIVITY_REQUEST_CODE — это просто целочисленная константа, уникальная в пределах действия, которая будет использоваться в качестве кодов запроса при запуске намерения для результатов.

Чтобы получить фото в onActivityResult и обновить фон представления

public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == PHOTO_ACTIVITY_REQUEST_CODE && data != null) {
    Bundle extras = data.getExtras();
    if (extras != null) {
        Bitmap photo = (Bitmap) extras.get("data");
        if (photo != null) {
            // mView should refer to view whose reference is obtained in onCreate() using findViewById(), and whose background you want to update
            mView.setBackground(new BitmapDrawable(getResources(), photo));
        }
    }
}

Приведенный выше код не использует полноразмерную фотографию. Для этого вам нужно будет попросить Фото намерение сохранить его в файл и прочитать файл. Подробности представлены здесь

person Harshal    schedule 21.10.2014