如何在ImageView Android中维护图像的长宽比

时间:2019-11-14 17:28:00

标签: android android-layout

我在xml文件中有一个LinearLayout,并用Java代码创建了一个ImageView。我必须用Java代码而不是xml创建ImageView,因为我需要在同一LinearLayout中将ImageView与TextView替换。

这是我的xml文件中的LinearLayout:

<LinearLayout
        android:id="@+id/linearLay"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:orientation="vertical">

这是我的Java代码的一部分:

public class MainActivity extends AppCompatActivity {    

        public ImageView questionImage;

           @Override
           protected void onCreate(Bundle savedInstanceState) {
               super.onCreate(savedInstanceState);
               setContentView(R.layout.activity_main);

               LinearLayout ll = (LinearLayout)findViewById(R.id.linearLay);
               questionImage = new ImageView(this);
               LinearLayout.LayoutParams layoutParams = new 
                       LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 
                       LinearLayout.LayoutParams.MATCH_PARENT);
               layoutParams.gravity = Gravity.CENTER;
               questionImage.setLayoutParams(layoutParams);
               ((LinearLayout) ll).addView(questionImage);

               // imageview.setScaleType doesn't work
               questionImage.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
               questionImage.setBackgroundResource(R.drawable.imageA);
          }
}

结果是我可以看到imageA适合我所有的LyinearLayout,但不保持其纵横比。 由于LinearLayout的权重为5,因此将其设置为MATCH_PARENT的宽度和高度为0dp(我在同一活动中显示了其他TextView和Button)。

我想做的是在我的LinearLayout的中心显示imageA,并将其长宽比保持在最大可能的大小(例如imageA = 250p x 250p,LinearLayout = 400p x 600p-> imageA调整为400p x 400p并居中在中间;例如imageA = 250p x 250p,LinearLayout = 100p x 180p-> imageA调整为100p x 100p并居中)。

为什么setScaleType不起作用?我会以不同的方式做吗?你能帮我举个例子吗?

先谢谢了。

编辑:

我通过使用questionImage.setImageResource(R.drawable.imageA);

解决了该问题

2 个答案:

答案 0 :(得分:0)

如果要保持图像的纵横比,请将ImageView的SET AdjustViewBounds属性设置为true。

答案 1 :(得分:0)

您可以将adjustViewBounds的属性ImageView设置为true。另外,请确保将其设置为src而不是background,因为将其设置为background会使它缩放和变形。

setAdjustViewBounds
并且以编程方式设置src时,您可以使用setImageDrawable