根据另一个ImageView的属性缩放ImageView

时间:2016-11-08 14:15:14

标签: android imageview scale

我正在尝试将Imageview置于另一个Imageview之上,如下所示:

Desired Outcome

这是我用来实现这个目的的布局:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="8dp">

    <ImageView
        android:id="@+id/list_item_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:scaleType="fitXY"
        android:layout_gravity="center" />

    <ImageView
        android:id="@+id/list_item_logo"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:paddingLeft="10dp"
        android:paddingTop="10dp"
        android:layout_gravity="top|start" />
</FrameLayout>

这可以将徽标放在图像的顶部,但这里的问题是我还应该根据图像的属性缩放徽标(原始大小与图像大致相同)。更具体地说,我想以图像宽度的四分之一渲染徽标,宽高比为1:1,并添加10%的图像宽度填充。

目前,我只是在使用logo的layoutwidth,layoutheight,paddingLeft和paddingTop的值,直到我得到所需的结果。有没有办法根据图像的属性动态更改徽标的属性?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

考虑使用PercentRelativeLayout来实现所需的布局,其中徽标的顶部和起始边距为10%,宽度为10%(或者您需要的宽度百分比)。请注意,SquareImageView是目前在包com.example的自定义视图,并且它将忽略给定的任何高度值,并将重置为计算的宽度(这是图像宽度的10%) )。

示例XML:

<RelativeLayout 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.support.percent.PercentRelativeLayout
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_centerInParent="true">


        <ImageView
            android:id="@+id/image"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#ff0000" />

        <com.example.SquareImageView
            android:id="@+id/logo"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:background="#0000ff"
            app:layout_heightPercent="10%"
            app:layout_marginStartPercent="10%"
            app:layout_marginTopPercent="10%"
            app:layout_widthPercent="10%" />


    </android.support.percent.PercentRelativeLayout>
</RelativeLayout>

SquareImageView.java:

public class SquareImageView extends ImageView {
    public SquareImageView(Context context) {
        super(context);
    }

    public SquareImageView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(getMeasuredWidth(), getMeasuredWidth()); // Snap to width
    }
}