私はウェブサイトでもっと検索して、以下のような多くの提案を得ました
角の半径とパディングを設定するカスタムスタイルで背景を変更する(画像を長方形として、背景を丸い角として取得)
このビットマップと幅を渡すことで画像をデコードし、トリミング機能を使用して、指定された画像をビットマップに変更します(読み込みに時間がかかります)
WhatsApp Chat history list and it has rounded corner images but its loaded with minimum time
を確認しました。
WhatsAppのように丸みを帯びた画像でリストビューテンプレートを作成する最良の方法を教えてください
xml ページでスタイルの詳細を設定して、角が丸い画像を変更することを期待しています。 (画像の幅と高さは60 dpで、リストビューにも約60のアイテムがあります)
参照:
res/mylayout.xml:
<ImageView
Android:id="@+id/contactssnap"
Android:layout_width="50dp"
Android:layout_height="50dp"
Android:src="@drawable/contactssnap"
Android:background="@drawable/roundimage" />
res/drawable/roundimage.xml:
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" >
<solid Android:color="#ffffffff" />
<stroke
Android:width="2dp"
Android:color="#90a4ae" />
<size
Android:height="50dp"
Android:width="50dp" />
<padding
Android:bottom="2dp"
Android:left="2dp"
Android:right="2dp"
Android:top="2dp" />
<corners Android:radius="100dp" />
</shape>
注:サポートされていますAndroid 14から22へのバージョン
Satsからの回答が機能します。ただし、RoundedBitmapDrawableは、scaleType:centerCropのImageViewには適用できません。
更新されました。
Android APIをレベル21で使用している場合。ここに簡単な解決策があります。
1つ目は、imageviewの背景としてドローアブルを作成する
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle">
<corners Android:radius="8dp" />
<solid Android:color="@Android:color/white" />
<stroke
Android:width="1dp"
Android:color="@color/colorWhite" />
</shape>
次に、ImageViewのプロパティsetClipToOutlineをtrueに変更します。また、ImageViewの背景として丸いドローアブルを設定します。
それでおしまい。
私のデモでは、この方法を使用して丸めたイメージビューを作成します。ここで見つけることができます cubertoのダイアログ
CardViewにimageViewを配置し、CardViewのCornerRadiusを設定します。
<Android.support.v7.widget.CardView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:cardCornerRadius="8dp"
app:cardElevation="0dp">
<ImageView
Android:id="@+id/imgTourismHr"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:scaleType="fitXY" />
</Android.support.v7.widget.CardView>
googleが提供する標準APIを使用して、循環ImageViewを作成できます。
ImageView imageView = (ImageView) findViewById(R.id.circleImageView);
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.image);
RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(getResources(), bitmap);
roundedBitmapDrawable.setCircular(true);
imageView.setImageDrawable(roundedBitmapDrawable);
今度は丸みを帯びたボーダーで丸みのある長方形の画像を設定します
app:cardCornerRadius = "30dp"、app:cardUseCompatPadding = "true"、 app:cardElevation = "0dp"。
以下のXmlコードを参照してください
<androidx.cardview.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="center"
app:cardCornerRadius="30dp"
app:cardUseCompatPadding="true"
app:cardElevation="0dp"
Android:layout_margin="5dp"
>
<ImageView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:src="@drawable/temp"
Android:scaleType="fitXY"
Android:layout_gravity="center"
/>
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
RequestImages.circleCropTransform()を使用してネットワーク画像をロードする際にGlideを使用する人のための簡単な解決策:
Glide.with(context)
.load(imageUrl)
.apply(RequestOptions.circleCropTransform())
.into(object : CustomViewTarget<ImageView, Drawable>(imageView) {
override fun onLoadFailed(errorDrawable: Drawable?) {
}
override fun onResourceCleared(placeholder: Drawable?) {
}
override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable>?) {
imageView.setImageDrawable(resource)
}
})
あなたはアンドロイドで9パッチテクニックをチェックしましたか?
角の丸いwhatsアプリのバブルチャットのようなものを作成しようとしている場合は、XMLビットマップデコーダーを使用する代わりに、この手法を使用することをお勧めします。
次に例を示します。 Link
この例によれば、9つのパッチジェネレーターを使用して、ビューのコンテンツと画面のサイズに合わせて自動的にサイズ変更される独自のカスタム形状とビットマップ画像を作成できます。画像の選択された部分は、画像内に描かれたインジケーターを水平方向または垂直方向にスケーリングします。