幅と高さが固定されたセルがあり、100x100pxにします。そのセル内に、ImageView
の周りにボーダーを表示します。
最初のアイデアは、ImageView
にバックグラウンドリソースを配置し、1dpのパディングを追加して境界効果を作成することでした。
<LinearLayout
Android:layout_width="100dp"
Android:layout_height="100dp" >
<ImageView
Android:id="@+id/imageView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/image_border"
Android:padding="1dp"
Android:src="@drawable/test_image" />
</LinearLayout>
どうやらこれは動作するはずですが、動作しないか、少なくとも期待どおりではありません。
[。
黄色の境界線に注意してください。ImageViewの周りに正確に1pxである必要があります。
どんな種類の助け、アイデア、提案も大歓迎です。
LinearLayoutにpadding = 1と背景色を配置すると、1ピクセルの黄色の境界線ができます。
ここに私のために働いたものがあります...
<!-- @drawable/image_border -->
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="@color/colorPrimary"/>
<stroke Android:width="1dp" Android:color="#000000"/>
<padding Android:left="1dp" Android:top="1dp" Android:right="1dp" Android:bottom="1dp"/>
</shape>
<ImageView
Android:layout_width="300dp"
Android:layout_height="300dp"
Android:layout_gravity="center"
Android:padding="1dp"
Android:cropToPadding="true"
Android:scaleType="centerCrop"
Android:background="@drawable/image_border"/>
ここでは、ビューページャーとボーダー付きのイメージビューで得られた結果です。
画像のサイズが可変の場合、常にその効果が得られます。 ImageViewに固定サイズを設定し、設定された背景色を与える必要があると思います-例の外観からは黒が理にかなっています。 ImageLayoutをFrameLayoutまたは黄色の背景と1pxパディングのあるビューでラップします。
編集
私はこれについて考えました、そして、私の答えはそう感じませんでした...
各ImageViewを固定サイズ、パディング、およびマージンで設定する場合。必要に応じて背景色を設定すると、必要な効果を得ることができます。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="wrap_content"
Android:layout_height="fill_parent" >
<ImageView
Android:id="@+id/imageView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:background="#52D017"
Android:padding="1dp"
Android:layout_margin="5dp"
Android:src="@drawable/test1"
tools:ignore="ContentDescription" />
<ImageView
Android:id="@+id/imageView2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_margin="5dp"
Android:background="#52D017"
Android:padding="1dp"
Android:src="@drawable/test2"
tools:ignore="ContentDescription" />
</LinearLayout>
スクリーンショットでは、表示される画像は両方とも幅が100ピクセル未満で、高さが異なります。
(この場合)黄緑色が透けて見えるので、これは背景が透明な画像を処理しません。これを解決するには、各ImageViewをFrameLayoutにラップします。 ImageViewの背景を黒にし、必要なパディングでFrameLayoutをWrapContentに設定します(私は思う)
カスタム画像ビューを使用して、境界線を取得できる場所からコードを作成できます。必要に応じてパディングの幅とストロークの幅を変更することもできます。それはコードの最初の行のすぐ下に指定されています、ありがとう
public class FreeCollage extends ImageView {
private static final int PADDING = 8;
private static final float STROKE_WIDTH = 5.0f;
private Paint mBorderPaint;
public FreeCollage(Context context) {
this(context, null);
}
public FreeCollage(Context context, AttributeSet attrs) {
this(context, attrs, 0);
setPadding(PADDING, PADDING, PADDING, PADDING);
}
public FreeCollage(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initBorderPaint();
}
private void initBorderPaint() {
mBorderPaint = new Paint();
mBorderPaint.setAntiAlias(true);
mBorderPaint.setStyle(Paint.Style.STROKE);
mBorderPaint.setColor(Color.WHITE);
mBorderPaint.setStrokeWidth(STROKE_WIDTH);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(PADDING, PADDING, getWidth() - PADDING, getHeight() - PADDING, mBorderPaint);
}
}
ImageViewにadjustViewBoundsプロパティを追加するだけです。
<ImageView
Android:id="@+id/imageView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:background="@drawable/image_border"
Android:padding="1dp"
Android:adjustViewBounds="true"
Android:src="@drawable/test_image" />
Android:adjustViewBounds="true"
は、[wrap_content]に設定されたAndroid:layout_width
およびAndroid:layout_height
でのみ機能することに注意してください。
これは私のために働いたものです:
<ImageView
Android:id="@+id/dialpad_phone_country_flag"
Android:layout_width="22dp"
Android:layout_height="15dp"
Android:scaleType="fitXY"
Android:background="@color/gen_black"
Android:padding="1px"/>
imageViewレイアウトに次の行を追加するだけです
imageviewのlayout_widthとlayout_heightがuseよりmatch_parentではない場合、
Android:adjustViewBounds = "true"
または
Android:adjustViewBounds = "true"
Android:scaleType="fitXY"
または
Android:adjustViewBounds = "true"
Android:scaleType="centerCrop"
Imageviewにscaletyleを追加する必要があります。その後、あなたの画像はフィットします。
Android:scaleType = "fitXY"
以下は、私の最も簡単なソリューションで使用したコードスニペットです。
<FrameLayout
Android:layout_width="112dp"
Android:layout_height="112dp"
Android:layout_marginLeft="16dp" <!-- May vary according to your needs -->
Android:layout_marginRight="16dp" <!-- May vary according to your needs -->
Android:layout_centerVertical="true">
<!-- following imageView acts as the boarder which sitting in the background of our main container ImageView -->
<ImageView
Android:layout_width="112dp"
Android:layout_height="112dp"
Android:background="#000"/>
<!-- following imageView holds the image as the container to our image -->
<!-- layout_margin defines the width of our boarder, here it's 1dp -->
<ImageView
Android:layout_width="110dp"
Android:layout_height="110dp"
Android:layout_margin="1dp"
Android:id="@+id/itemImageThumbnailImgVw"
Android:src="@drawable/banana"
Android:background="#FFF"/>
</FrameLayout>
さらに説明が必要な場合は、次の link をご覧ください。ここで十分に説明しました。
これが皆さんの役に立つことを願っています!
乾杯!