我在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);
答案 0 :(得分:0)
如果要保持图像的纵横比,请将ImageView的SET AdjustViewBounds属性设置为true。
答案 1 :(得分:0)
您可以将adjustViewBounds
的属性ImageView
设置为true。另外,请确保将其设置为src
而不是background
,因为将其设置为background
会使它缩放和变形。
setAdjustViewBounds
并且以编程方式设置src
时,您可以使用setImageDrawable