如何在视图上执行缩放后获取实际高度和宽度(以像素为单位)

时间:2018-03-02 11:52:10

标签: android android-view

我有.et_pb_row_5 .et_pb_row { line-height: 0; } seekbar。在搜索栏的移动中,相应地缩放Imageview。以下是我的整个代码

XML

ImageView

Java代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
tools:context="com.app.pdf.pdfmetadata.Main2Activity">

<FrameLayout
    android:background="#20000000"
    android:layout_width="match_parent"
    android:layout_height="300dp">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src="@android:drawable/ic_dialog_info"/> 
</FrameLayout>

<SeekBar
    android:id="@+id/seekbar"
    android:min="1"
    android:max="5"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

}

正如您所看到的,我只是缩放Imageview并打印它的高度。

问题

这里的高度总是让我得到一个常数值96.缩放后是否可以获得像素的实际高度?我需要的是相对于Image视图父级占用的实际高度。 在我的例子中,它的FrameLayout高度为300dp。除此之外,在缩放后我的ImageView占用了多少?

1 个答案:

答案 0 :(得分:2)

问题在于,当您使用ViewscaleXscaleY设置动画时,您并未更改层次结构中的View维度,而只是屏幕上渲染的尺寸。在View.getWidth()View.getHeight() View内,ViewscaleX会在父scaleY内列出float renderedWidth = view.getWidth() * progress; float renderedHeight = view.getHeight() * progress; 的大小只影响渲染。

为了获得&#34;实际&#34;渲染大小,您需要将视图的宽度和高度乘以进度

animate()

此外,0的持续时间为View.setScaleX(float)是什么意思?您可以直接使用View.setScaleY(float)<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <View android:id="@+id/redSquare" android:layout_width="48dp" android:layout_height="48dp" android:layout_centerHorizontal="true" android:background="#ffff0000" /> <View android:id="@+id/blackSquare" android:layout_width="48dp" android:layout_height="48dp" android:layout_below="@+id/redSquare" android:layout_centerHorizontal="true" android:background="#ff000000" /> <View android:id="@+id/blueSquare" android:layout_width="48dp" android:layout_height="48dp" android:layout_below="@+id/redSquare" android:layout_centerHorizontal="true" android:scaleX="2" android:scaleY="2" android:background="#550000ff" /> </RelativeLayout>

如果您想更好地了解布局与渲染尺寸/坐标之间的区别,我建议您运行此布局:

android:layout_below="@+id/redSquare"

如您所见,黑色正方形位于红色正方形的正下方。另一方面,蓝色方块与红色方块重叠,即使它具有相同的属性scaleX。发生这种情况是因为scaleY2没有改变蓝色方块的位置,因此蓝色方块位于布局中的红色方块下方,但是当重新缩放时,其大小缩放系数为{ {1}}因此重叠红色方块