当前位置: 代码迷 >> Android >> ImageView怎么用代码控制大小
  详细解决方案

ImageView怎么用代码控制大小

热度:10   发布时间:2016-04-28 00:25:01.0
ImageView如何用代码控制大小
本帖最后由 a379992210 于 2015-06-11 22:44:22 编辑
直接在XML中控制宽高和其他的view一样都是这样

<ImageView android:layout_width="200dp"
            android:layout_height="200dp"/>

直接用代码控制View宽高的话可以LayoutParams,但是对ImageView好像不顶用啊

for (int i = 0; i < contentImages.size(); i++) {
    Bitmap bmp = contentImages.get(i);

    ImageView imageView = new ImageView(mInflater.getContext());
    imageView.setScaleType(ImageView.ScaleType.CENTER);
    imageView.setPadding(5, 5, 5, 5);
    imageView.setBackgroundColor(Color.RED);
    imageView.setLayoutParams(new ViewGroup.LayoutParams(200,200));
    imageView.setImageBitmap(bmp);

    GridLayout.Spec rowSpec = GridLayout.spec(i / 3);
    GridLayout.Spec columnSpec = GridLayout.spec(i % 3);
    GridLayout.LayoutParams paramsGl = new GridLayout.LayoutParams(rowSpec,columnSpec);

    contentImageGrid.addView(imageView, paramsGl);
}

上面这段代码,
是在GridLayout中动态增加ImageView,
但生成ImageView大小都是自适应Bitmap大小的,而不是200*200的。
------解决思路----------------------
利用getLayoutParams()方法 和 setLayoutParams()方法 重新 设置 控件的 布局,

1、首先利用getLayoutParams()方法,获取控件的LayoutParams。
     eg:LayoutParamslaParams=(LayoutParams)imageView.getLayoutParams();


2、设置该控件的layoutParams参数
    eg: 

       laParams.height=200;
       laParams.width=100;

3、将修改好的layoutParams设置为该控件的layoutParams.
   eg:imageView.setLayoutParams(laParams);
------解决思路----------------------
imageview特殊,用imagebutton或者button都行
------解决思路----------------------
GridLayout好像不接受ViewGroup.LayoutParams(200,200)这种属性
用RelativeLayout试试
------解决思路----------------------
 
    public synchronized void setmark(ImageView view,double d)
    {
         int width=237;
         int mask=(int) (237*d);
         LayoutParams params=view.getLayoutParams();
         params.width=width-mask;
         view.setLayoutParams(params);
         view.setVisibility(View.VISIBLE);
//         view.postInvalidate();
    }
这样是可以滴
------解决思路----------------------
直接用数字的话,可能默认单位就不是 dp 了,这个是我曾经用的换算方法
static float fzoom = 0f;

/**
 * 计算按照屏幕比例缩放后的尺寸 
 * @param context
 * @param size
 * @return
 */
public static int zoom(Activity context, int size){
if(fzoom == 0f){
WindowManager windowManager = context.getWindowManager();
Display display = windowManager.getDefaultDisplay();
DisplayMetrics metrics = new DisplayMetrics(); 
display.getMetrics(metrics);
fzoom = metrics.density;
}
return (int)(size * fzoom);
}

------解决思路----------------------
直接用数字是像素的,要自己转dp
------解决思路----------------------
设置layoutParams
   imageview.getLayutParams.height=高度
   imageview.getLayutParams.width=宽度

高度,宽度根据DisplayMetrics获得的数据,进行等比例计算就可以了。
   int width = dm.widthPixels;
   int height = dm.heightPixels;
高度=(int)200.0/参照比例*height.(如:参照比例是:640)
如果宽高等比例,宽高的计算都使用相同参照,如:都用height进行计算或都用width进行计算。
  相关解决方案