2016-11-08 5 views
0

Я пытаюсь поместить ImageView поверх другого ImageView следующим образом:Шкала 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% заполнения ширины изображений.

На данный момент я просто играю со значениями layoutwidth, layoutheight, paddingLeft и paddingTop логотипа, пока не получу желаемый результат. Есть ли способ динамически изменять свойства логотипа на основе свойств изображения?

Любая помощь очень ценится.

ответ

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 
    } 
} 
+0

Эй, большое спасибо за помощь. Он отлично работает. :) –

+1

Рад, что я могу помочь. – MohanadMohie

+0

Я столкнулся с другой проблемой, и мне было интересно, можете ли вы мне помочь. Свойство app: layout_marginTopPercent = "10dp" похоже не работает, поскольку логотип всегда застревает в верхней части изображения, независимо от того, какое значение я передаю в этот параметр. Возможно, стоит отметить, что xml представляет элемент в RecyclerView, это может иметь какое-то отношение к тому, что маржа не работает. Изменить: обратите внимание, что приложение: layout_marginStartPercent = «10%» работает просто отлично, что делает его еще более странным, что marginTopPercent не работает. –