在Android中的自定义视图中将大小和位置设置为imageview

时间:2014-02-16 17:59:35

标签: java android android-layout android-imageview

我有一个扩展View的自定义类。我希望在这个类中有一个imageview,它应该是View的大小,所以当我将View添加到一个布局时,它会显示View的imageview。 我的问题是,我无法改变imageview的大小。

public class CustomView extends View{

ImageView imageView;

public CustomView(Context context, float ivSize) {
    super(context);

    imageView = new ImageView(context);

    //change size of imageView here

}

我尝试了什么:

        LinearLayout.LayoutParams imgvwDimens = 
                new LinearLayout.LayoutParams((int)ivSize, (int)ivSize);
        imageView.setLayoutParams(imgvwDimens);

什么也没有

    android.view.ViewGroup.LayoutParams layoutParams = imageView.getLayoutParams();
    layoutParams.width = (int)ivSize;
    layoutParams.height = (int)ivSize;
    imageView.setLayoutParams(layoutParams);

-nullpointer for layoutParams.width& layoutParams.height

imageView.setLayoutParams(new LayoutParams((int)ivSize, (int)ivSize));

什么也没有

    imageView.requestLayout();
    imageView.getLayoutParams().height = (int)ivSize;
    imageView.getLayoutParams().width = (int)ivSize;

-nullpointer for .width& .height

我知道可能还没有params,因为我没有使用xml的imageview,但这只解释了案例2和4.我不明白为什么1和3什么也不做,我不知道是什么否则我可以试试。 我错过了什么?

编辑:解决方案

现在使用,我扩展了RelativeLayout而不是View,在构造函数中添加了imageView,如下所示:

this.addView(imageView);  

并实施

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    imageView.layout(0, 0, ivSize, ivSize);
}

谢谢你们!

1 个答案:

答案 0 :(得分:1)

如果要包含另一个视图,则需要创建自定义ViewGroup而不是自定义视图。通常,如果执行此操作,则延伸RelativeLayout或LinearLayout,以便编写所有布局代码,并设置相应类型的LayoutParams。您还必须通过addView

将ImageView添加到自定义ViewGroup