如何动态设置ImageView的宽度高度以及位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何动态设置ImageView的宽度高度以及位置相关的知识,希望对你有一定的参考价值。

参考技术A 动态的获取和设置ImageView的宽度和高度,参考实例如下:
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.ImageView;

public class PicTest extends Activity
private final String TAG = "Pictrue Test!!!";
private ImageView image;
private int height = 0;
private int width = 0;

@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

image = (ImageView)findViewById(R.id.ImageView01);
//height = image.getHeight();
//width = image.getWidth();
//Log.d(TAG, "height: " + height);
//Log.d(TAG, "width: " + width);

LayoutParams para;
para = image.getLayoutParams();

Log.d(TAG, "layout height0: " + para.height);
Log.d(TAG, "layout width0: " + para.width);

para.height = 300;
para.width = 300;
image.setLayoutParams(para);

Log.d(TAG, "layout height: " + para.height);
Log.d(TAG, "layout width: " + para.width);


本回答被提问者采纳

如何动态更改 ImageView 高度

【中文标题】如何动态更改 ImageView 高度【英文标题】:How to dynamically change ImageView Height 【发布时间】:2013-05-06 11:25:11 【问题描述】:

我有一个简单的线性布局用于 ListView 的单元格,它有一个 imageview。图片是从网上下载的,所以大小可以不同。

但是,我想将imageview的宽度设置为fill_parent,这是固定的,并在运行时动态改变图像高度。设置图像高度的规则: 如果图片的h/w比大于1,把ImageView做成正方形,意思是高度和宽度匹配。

如果图像的 h/w 比小于 1,则按比例调整大小。预计有两个样本如下。

第一个是 h/w1。

谢谢你的时间。

    <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="@color/white"
    android:orientation="vertical"
    android:padding="10dp" >

        <TextView
        android:id="@+id/postTitle"
        android:layout_
        android:layout_
        android:ellipsize="end"
        android:maxLines="2"
        android:textColor="@color/black"
        android:textSize="18sp"
        android:textStyle="bold" />

       <ImageView
        android:id="@+id/postImg"
        android:layout_
        android:layout_
        android:layout_marginTop="10dp"
        android:scaleType="centerCrop"
        android:src="@drawable/dummy_image"
        android:contentDescription="@string/postImage"  />
   </LinearLayout>

【问题讨论】:

【参考方案1】:

你需要继承 ImageView

覆盖onMeasure,我没有测试过,但是你需要的所有变量都在那里,这个想法是正确的。您只需将图像的纵横比应用到图像视图的高度,如果它大于宽度,则将其设置为宽度。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

    Drawable drawable = getDrawable();
    if (drawable != null)
    
        //get imageview width
        int width =  MeasureSpec.getSize(widthMeasureSpec);


        int diw = drawable.getIntrinsicWidth();
        int dih = drawable.getIntrinsicHeight();
        float ratio = (float)diw/dih; //get image aspect ratio

        int height = width * ratio;

        //don't let height exceed width
        if (height > width)
            height = width;
        


        setMeasuredDimension(width, height);    
    
    else
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);


【讨论】:

会发生什么,因为这些设置会缩放图像,使宽度是静态的,而高度会根据图像的纵横比拉动。 我展示的xml是用于适配器的getview,ImageView从url动态加载图像 其实我会问“如何获得 fill_parent 的实际 px 大小”,我通过 DisplayMetrics 弄清楚了 要做你正在做的事情,你真的不需要这样做......你能发布问题的截图吗? 更新问题,请看。谢谢【参考方案2】:

代码中从url加载imageView的地方,要在那边设置ImageView的布局参数。它将动态更改图像的尺寸。

加载图像后,找到尺寸并计算比例并根据您要应用的条件更改尺寸。

    LinearLayout.LayoutParams layoutParams  = new LinearLayout.LayoutParams(width,height);
    imageView.setLayoutParams(layoutParams);
    //set other properties of the imageview according to your condition

【讨论】:

我有图片尺寸。那么问题来了,我怎么知道要为 ImageView 设置什么高度?我通过 displaymetrics.widthPixels 减去我在 xml 布局中设置的边距(dp 到 px 转换)来做到这一点。这是最好的方法吗?谢谢

以上是关于如何动态设置ImageView的宽度高度以及位置的主要内容,如果未能解决你的问题,请参考以下文章

android 动态设置布局宽度

如何动态更改 ImageView 高度

如何给recyclerView瀑布流设置均等间距

如何给recyclerView瀑布流设置均等间距

ImageView 是动态宽度的正方形?

如何使用相机设置捕获的图像以适合固定高度和宽度的 Imageview