10

ImageViewダイアログ内に常に正方形の形を表示しようとしています。寸法はディスプレイの解像度(正確には縦向きの幅)によって異なる場合がありますが、ImageViewは、その中に正方形の画像を収容するために可能な限り最大の正方形を形成する必要があります。これは同じものの私のXMLコードです。

<ImageView
    android:id="@+id/dialog_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scaleType="centerInside"
    android:adjustViewBounds="true"
    />

ただし、問題は、Square画像が実行時に動的に設定され、ImageViewが正方形の画像サイズとして幅を持つ長方形になってしまうことです。同じことを達成するために何ができますか?

編集:私が達成しようとしていることのアイデアを与えることは、連絡先アプリケーションで連絡先が選択され、プロフィール写真がクリックされたときに表示されるもののようなものです。ズームアウトし、アクティビティの上に正方形のままになります。

4

4 に答える 4

13

実行時に画像ビューの高さを設定しますが、最初にこのコードで表示幅を取得します

Display  display = getWindowManager().getDefaultDisplay();
int swidth = display.getWidth();

次に、このように画像ビューの高さを設定します

LayoutParams params = eventImage.getLayoutParams();
params.width = LayoutParams.FILL_PARENT;
params.height = swidth ;
eventImage.setLayoutParams(params);
于 2012-11-29T10:32:32.043 に答える
3

以下に示すように、ImageViewクラスを継承する必要があるImageViewのサイズを動的に定義するための別のクラスを作成します。

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);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, widthMeasureSpec);

int width = getMeasuredWidth();
    setMeasuredDimension(width, width);

}

}

setMeasuredDimension(width、width); 高さを幅として自動的に設定します。

xmlファイルでは、以下に示すように、ImageViewの代わりにこのクラスをビューとして使用します。

  <com.packagepath.SquareImageView
        android:id="@+id/Imageview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
于 2015-07-15T13:19:05.830 に答える
3

あなたが使用することができます:

app:layout_constraintDimensionRatio="1:1"

この上:

<android.support.constraint.ConstraintLayout
      android:id="@+id/lyt_img_cover"
      android:layout_width="@dimen/image_top_episode"
      android:layout_height="match_parent"
      android:layout_centerInParent="false"
      android:elevation="0dp"
      android:foregroundGravity="center">

        <ImageView

          android:id="@+id/img_episode"
          android:layout_width="0dp"
          android:layout_height="0dp"
          android:elevation="7dp"
          app:layout_constraintBottom_toBottomOf="parent"
          app:layout_constraintDimensionRatio="1:1"
          app:layout_constraintLeft_toLeftOf="parent"
          app:layout_constraintRight_toRightOf="parent"
          app:layout_constraintTop_toTopOf="parent"
          />
    </ImageView>

そのレイアウトはConstraintLayoutである必要があります

于 2019-06-05T16:37:29.283 に答える
0

ImageView以下に示すように、ImageViewクラスを継承する独自のクラスを作成します。

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

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

    public SquareImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int width = MeasureSpec.getSize(widthMeasureSpec);
        int height = MeasureSpec.getSize(heightMeasureSpec);
        int size;

        //If the layout_width or layout_width of this view is set as match_parent or any exact dimension, then this view will use that dimension
        if(MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY ^ MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.EXACTLY) {
            if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY)
                size = width;
            else
                size = height;
        }
        //If the layout_width and layout_width of this view are not set or both set as match_parent or any exact dimension,
        // then this view will use the minimum dimension
        else
            size = Math.min(width, height);
        setMeasuredDimension(size, size);
    }
}
于 2017-05-28T03:26:53.590 に答える