如何从ImageView获取实际图像宽度/高度?

时间:2018-03-13 10:01:51

标签: android android-layout android-imageview

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rl_root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/myImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:background="@android:color/black"
        android:src="@drawable/image2" />

    <View
        android:id="@+id/view_clickable_first"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#aa000000" />


</RelativeLayout>

我想在获取坐标后使Imageview(myImage)中的一小部分图像可点击。它对我来说很好。 现在我想获得这张图片上的缩放缩放功能。当我放大时,可点击区域以及图像也将相应地缩放。

我的问题是,我希望在ImageView中获取图像的高度(不包括顶部和底部的黑色空格。由于ImageView设置为匹配父级,因此Image以横向模式显示在屏幕的中心)。每次我都得到了imageview的高度。

获取图像高度和图像视图的代码:

 int imagWidth = imageView.getWidth();
        int h = imageView.getHeight();


        int w = imageView.getDrawable().getIntrinsicWidth();
        int imagHeight = imageView.getDrawable().getIntrinsicHeight();

        Log.e("height", "Image height" + imagHeight + "\n" + "Imageview height" + h);

所以按计算: 图像高度= 882 Imageview身高= 672

3 个答案:

答案 0 :(得分:1)

为我工作

    imgView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                // Ensure you call it only once :
                imgView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                // Here you can get the size :)
                width = imgView.getWidth();
                height = imgView.getHeight();
            }
        });

答案 1 :(得分:0)

要在图像视图中获取图像的高度,您只需执行以下操作:

int width = imgView.getDrawable().getIntrinsicWidth();
int height = imgView.getDrawable().getIntrinsicHeight();

这将返回内在的&#39;高度和宽度的值。 (这些值是您加载到图像视图中的图像的值,没有任何缩放。您可以调整这些值以匹配您可能已应用的任何缩放)调整缩放值(假设它在横向模式下) )以下应该有效:

int width = imgView.getDrawable().getIntrinsicWidth();
int height = imgView.getDrawable().getIntrinsicHeight();  
double scale = ((double)imgeView.getWidth())/width
int final_height = Math.toIntExact(Math.round(scale * height));

现在,final_height是显示图像的高度。

答案 2 :(得分:0)

将以下代码与 ViewTreeObserver

一起使用
int yourImageViewWidth , yourImageViewHeight;
ImageView y = (ImageView)findViewById(R.id.scaled_image);
ViewTreeObserver vto = yourImageView.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    public boolean onPreDraw() {
        yourImageView.getViewTreeObserver().removeOnPreDrawListener(this);
        yourImageViewHeight = yourImageView.getMeasuredHeight();
        yourImageViewWidth = yourImageView.getMeasuredWidth();
        Log.d("Height: " + yourImageViewHeight + " Width: " + yourImageViewWidth);
        return true;
    }
});