2016-03-03 2 views
0

Я пытаюсь получить изображение обоев и установить его в качестве фона для представления. Я использовал этот код, чтобы получить обои как Drawable.Как обрезать Drawable изображение и установить его как фон для представления?

Drawable bg = WallpaperManager.getInstance(getApplicationContext()).getDrawable(); 

Теперь мне нужно установить этот шаблон в качестве фона для моего View. Его простой, как

view.setBackground(bg); 

Но это устанавливает все обои в качестве фона. Я хочу, чтобы для фона была задана только определенная область (например, верхняя половина). Мой вопрос заключается в том, как обрезать Drawable для выполнения этой задачи? Заранее спасибо.

+1

попробовать 'android.graphics.drawable.InsetDrawable' или написать собственный' 'Drawable' если InsetDrawable' не работает – pskink

+0

Спасибо. Я попробую. –

ответ

1

попробовать конвертировать Drawable как Картинку и использовать setImageBitmap (DrawableAsBitmap)

если у вас есть Drawable, как попробовать этот ресурс:

атрибуты Bitmap bitmap_background; int screenWidth = 0; int screenHeight = 0;

sizeScreen(); 
bitmap_background = decodeSampledBitmapFromResource(getResources(), R.drawable.your_resource, screenWidth, screenHeight); 
view.setImageBitmap(bitmap_background); 

private void sizeScreen() { 
    DisplayMetrics displaymetrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
    screenHeight = displaymetrics.heightPixels; 
    screenWidth = displaymetrics.widthPixels; 
} 

public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId, 
                int reqWidth, int reqHeight) { 

    // First decode with inJustDecodeBounds=true to check dimensions 
    final BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeResource(res, resId, options); 

    // Calculate inSampleSize 
    options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); 

    // Decode bitmap with inSampleSize set 
    options.inJustDecodeBounds = false; 
    return BitmapFactory.decodeResource(res, resId, options); 
} 

public static int calculateInSampleSize(
     BitmapFactory.Options options, int reqWidth, int reqHeight) { 
    // Raw height and width of image 
    final int height = options.outHeight; 
    final int width = options.outWidth; 
    int inSampleSize = 1; 

    if (height > reqHeight || width > reqWidth) { 

     // Calculate ratios of height and width to requested height and width 
     final int heightRatio = Math.round((float) height/(float) reqHeight); 
     final int widthRatio = Math.round((float) width/(float) reqWidth); 

     // Choose the smallest ratio as inSampleSize value, this will guarantee 
     // a final image with both dimensions larger than or equal to the 
     // requested height and width. 
     inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio; 
    } 

    return inSampleSize; 
} 
+0

Спасибо, что нашли время ответить на мой вопрос. Как я уже упоминал в вопросе, я получаю Drawable с WallpaperManager. Так что это не с ресурса. Я попробую. –

+0

попробуйте преобразовать ваш drawable из WallpaperManager в качестве растрового изображения и использовать setImageBitmap (DrawableAsBitmap) –

+0

Мне нужно установить drawable в качестве фона. Не изображение ImageView. –