Android 如何检查imageView是否符合布局?

Android 如何检查imageView是否符合布局?,android,android-layout,scale,android-imageview,Android,Android Layout,Scale,Android Imageview,我有一个RelativeLayout,里面有3个RelativeLayout。第二级相对布局具有已下载的imageView,其大小可能不同(高度、宽度)。我想检查imageView是否适合我的布局 我的第二级相对布局如下所示: <RelativeLayout android:id="@+id/tv_show_image_layout" android:layout_width="400dp" android:layout_height="200dp">

我有一个RelativeLayout,里面有3个RelativeLayout。第二级相对布局具有已下载的imageView,其大小可能不同(高度、宽度)。我想检查imageView是否适合我的布局

我的第二级相对布局如下所示:

<RelativeLayout
    android:id="@+id/tv_show_image_layout"
    android:layout_width="400dp"
    android:layout_height="200dp">

    <ImageView
        android:id="@+id/tvshow_imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="matrix"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/dummy" />

</RelativeLayout>
    UrlImageViewHelper.setUrlDrawable(show_image, url, R.drawable.dummy, new UrlImageViewCallback() {
        @Override
        public void onLoaded(ImageView imageView, Bitmap loadedBitmap,
                             String url, boolean loadedFromCache) {
            if (!url.equalsIgnoreCase(imageURL)) { 
                show_image.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
                int imageViewWidth = dpToPx(imageRelativeLayout.getWidth());
                int imageViewHeight = dpToPx(imageRelativeLayout.getHeight());

                float ratioWidth = (float) imageViewWidth / loadedBitmap.getWidth();
                float animationBounds = loadedBitmap.getHeight() * ratioWidth - imageViewHeight;
                imageView.setScaleX(ratioWidth);
                imageView.setScaleY((ratioWidth));
                if (animationBounds > 0)
                    showImageAnimation(animationBounds);

            }
        }
    });
但主要的问题是我不能得到正确的图像高度值来设置动画的移动范围


我应该如何让它开始只在imageView范围内上下移动的动画?

最后,我做了我需要的事情-缩放imageView以适应布局宽度,并开始动画以这种方式上下移动和显示图像

首先,xml是这样的。图像_布局是位于的子布局,放置在其他RelativeLayout中。它具有固定高度(200dp)

所以我正在下载图像,如果下载成功,我会缩放它以适应并开始动画(上下移动)。如果下载不成功,我会显示我在drawables中的虚拟图像。此外,还需要使用dpToPx方法来计算比例

private int dpToPx(int value) {
    Resources r = InformationFragment.this.getResources();
    return (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,
            r.getDisplayMetrics()
    );
}
最后一种显示动画的方法(需要确定动画速度公式):


我有RelativeLayout,里面有3个Relative Relayout
。。。不知道为什么?我有滑动菜单,所以它有3个组件,必须分别对齐。我不认为有什么问题,我有你的想法。然后,ImageView的大小将是正确的(已下载),但我的滑动菜单栏组件的大小将不同(正如我需要的)。所以这不是一个解决方案:/由于RelativeLayouts的布局方式,嵌套RelativeLayouts会导致大量重新布局,可能不是最有效的方式。我可以改变布局,是内部的任何类型的布局,可以中心我的形象。因此,如果有助于解决问题的话,它可能是内部线性布局
    UrlImageViewHelper.setUrlDrawable(show_image, url, R.drawable.dummy, new UrlImageViewCallback() {
        @Override
        public void onLoaded(ImageView imageView, Bitmap loadedBitmap,
                             String url, boolean loadedFromCache) {
            if (!url.equalsIgnoreCase(imageURL)) { 
                show_image.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
                int imageViewWidth = dpToPx(imageRelativeLayout.getWidth());
                int imageViewHeight = dpToPx(imageRelativeLayout.getHeight());

                float ratioWidth = (float) imageViewWidth / loadedBitmap.getWidth();
                float animationBounds = loadedBitmap.getHeight() * ratioWidth - imageViewHeight;
                imageView.setScaleX(ratioWidth);
                imageView.setScaleY((ratioWidth));
                if (animationBounds > 0)
                    showImageAnimation(animationBounds);

            }
        }
    });
private int dpToPx(int value) {
    Resources r = InformationFragment.this.getResources();
    return (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP,
            value,
            r.getDisplayMetrics()
    );
}
private void showImageAnimation(float animationBounds) {
    TranslateAnimation animation = new TranslateAnimation(0.0f, 0.0f,
            0.0f, -animationBounds);
    animation.setDuration((int)animationBounds/20*1000);
    animation.setRepeatCount(Animation.INFINITE);
    animation.setRepeatMode(Animation.REVERSE);     
    show_image.startAnimation(animation);
}