linearlayout setbackground scale drawable维持纵横比

时间:2014-12-20 10:18:44

标签: android layout

我正在尝试使用带有BitmapDrawable的linearlayout为活动创建模糊背景。 原始和模糊的位图类似于100x100。我想为手机分辨率统一缩放(例如1080p,这不是正方形)。我在运行时获得了背景图标。

    LinearLayout layout = (LinearLayout) findViewById(R.id.mylinearlayout);

    Bitmap bmp = imgLoader.getBitmap(iconUrl);

    //Blur using this thread http://stackoverflow.com/questions/14780006/transparent-blurry-view-which-blurs-layout-underneath
    Bitmap blurredBmp = CommonUtils.blurBitmap(bmp, Constants.RADIUS);
    BitmapDrawable bmpdrawable = new BitmapDrawable(getResources(),blurredBmp);
    bmpdrawable.setAlpha(Constants.ALPHA);

    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
        layout.setBackgroundDrawable(bmpdrawable);
    } else {
        layout.setBackground(bmpdrawable);
    } 

现在,问题:     当我设置背景时,100x100基本上被拉伸到非方形手机分辨率,看起来很奇怪。

我想要的:用拉伸的位图填充整个活动背景。如果它的一部分被剪裁但是需要保持纵横比,那就没关系。

我尝试过:设置布局背景的很多线程建议使用imageview作为元素之一+使用gravity和fill_parent。我不想这样做,因为我有其他图像要在屏幕上显示。

我在创建模糊位图或发送不同宽度/高度时尝试了Bitmap.createScaledBitmap它无法正常工作。任何帮助将不胜感激。

在不理解问题的情况下将此标记为另一个线程的欺骗并不是很酷。

感谢

2 个答案:

答案 0 :(得分:0)

好的,这很有效。

    LinearLayout layout = (LinearLayout) findViewById(R.id.testreportlinearlayout);

    Bitmap bmp = imgLoader.getBitmap(iconUrl);
    Bitmap blurredBmp = CommonUtils.blurBitmap(bmp, Constants.RADIUS);

    Bitmap scaledBmp = Bitmap.createScaledBitmap(blurredBmp, MAX_OF_NEW_XY, MAX_OF_NEW_XY, false);
    BitmapDrawable scaledBmpdrawable = new BitmapDrawable(getResources(), scaledBmp);
    scaledBmpdrawable.setAlpha(Constants.ALPHA);
    scaledBmpdrawable.setGravity(Gravity.CENTER);

    if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) {
        layout.setBackgroundDrawable(scaledBmpdrawable);
    } else {
        layout.setBackground(scaledBmpdrawable);
    }

答案 1 :(得分:0)

这个问题有很多解决方案。

只设置为颜色

ShapeDrawable bgShape = (ShapeDrawable )parentLayout.getBackground();
bgShape.getPaint().setColor(Color.BLACK);