【问题标题】:linearlayout setbackground scale drawable maintaining aspect ratio线性布局设置背景比例可绘制保持纵横比
【发布时间】:2015-02-17 23:36:08
【问题描述】:

我正在尝试使用带有 BitmapDrawable 的线性布局为活动做一个模糊的背景。 原始和模糊的位图就像 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 作为元素之一 + 使用重力和填充父。我不想这样做,因为我还有其他图像要显示在屏幕上。

我在创建模糊位图或发送不同宽度/高度时尝试了 Bitmap.createScaledBitmap,但它不起作用。任何帮助将不胜感激。

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

谢谢

【问题讨论】:

  • 扩展 BitmapDrawable 并在draw(Canvas) 方法中进行自定义绘图,最简单的方法是使用带有 Matrix 参数的 Canvas.drawBitmap
  • 并且不要使用任何 Bitmap.createScaledBitmap,而是缩放您的 Canvas(直接或间接)

标签: android layout


【解决方案1】:

好的,这成功了。

    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);
    }

【讨论】:

  • 这是一个糟糕的解决方案:不要使用 Bitmap.createScaledBitmap,因为它会增加内存使用量,而不是使用 Canvas Scaling 进行位图缩放
【解决方案2】:

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

当你只设置为颜色时

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

【讨论】:

    猜你喜欢
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    相关资源
    最近更新 更多