我想下载一个图像(大小未知,但总是大致呈正方形),并将其显示出来,使其水平填充屏幕,并在任何屏幕大小上垂直拉伸以保持图像的纵横比.这是我的(非工作)代码.它会水平拉伸图像,但不会垂直拉伸,因此图像会被挤压...

ImageView mainImageView = new ImageView(context);
    mainImageView.setImageBitmap(mainImage); //downloaded from server
    mainImageView.setScaleType(ScaleType.FIT_XY);
    //mainImageView.setAdjustViewBounds(true); 
    //with this line enabled, just scales image down
    addView(mainImageView,new LinearLayout.LayoutParams( 
            LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));

推荐答案

我用自定义视图完成了这项工作.设置layout_width="fill_parent"和layout_height="wrap_content",并将其指向适当的可绘制位置:

public class Banner extends View {

  private final Drawable logo;

  public Banner(Context context) {
    super(context);
    logo = context.getResources().getDrawable(R.drawable.banner);
    setBackgroundDrawable(logo);
  }

  public Banner(Context context, AttributeSet attrs) {
    super(context, attrs);
    logo = context.getResources().getDrawable(R.drawable.banner);
    setBackgroundDrawable(logo);
  }

  public Banner(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    logo = context.getResources().getDrawable(R.drawable.banner);
    setBackgroundDrawable(logo);
  }

  @Override protected void onMeasure(int widthMeasureSpec,
      int heightMeasureSpec) {
    int width = MeasureSpec.getSize(widthMeasureSpec);
    int height = width * logo.getIntrinsicHeight() / logo.getIntrinsicWidth();
    setMeasuredDimension(width, height);
  }
}

Android相关问答推荐

如何在Android Room中使用@Relation多对一查询

如何允许我的应用程序在Android 10上运行,同时目标是API 33

从单元测试访问RES/RAW文件

Android:微调:在代码中设置ArrayAdapter不希望调用On ItemSelected,仅当用户单击微调时调用

Android在NavHost中的LazyColumn中编写约束布局:error - replace()在未放置的项目上调用

Android手柄注射周期错误,多个模块引用一个核心模块

Gradle在我的Android Compose项目中继续推广依赖版本

如何避免多次调用 Jetpack Compose 的 onClick 回调

通过 setIntentScanningStrategyEnabled(true) 未检测到信标的 Android Beacon 库后台扫描

为什么@PrimaryKey val id: Int? = null 在创建 Room 实体时有效吗?

从 Jetpack Compose 中的 IconButton 中删除黑色色调

如何在 Jetpack Compose 中向图像视图添加对角色带?

Jetpack Compose 动画的行为是什么?

Android collectAsStateWithLifecycle() 不在可组合内部收集

如何在jetpack compose中通过lamda返回columnScope/RowScope

MediumTopAppBar Material3 只更改大标题

Kotlin 调用带参数的函数 Any is xxx ||任何 yyy 都不起作用

使用 Jetpack Compose 时,如何以简单的方式在 Color.kt 中定义 colored颜色 ?

如何在stroke android drawable中设置渐变

未解决的参考:getIntentSender / try 在 Jetpack Compose 中获取电话号码时