Android圓角設(shè)置方法看著一篇文章就夠了
方法1:Outline
getView(R.id.image_view_1).setClipToOutline(true);
getView(R.id.image_view_1).setOutlineProvider(new ViewOutlineProvider() {
@Override
public void getOutline(View view, Outline outline) {
outline.setRoundRect(0, 0, view.getWidth(), view.getHeight(), radius);
}
});實(shí)現(xiàn)方法:
1) 要設(shè)置圓角的View.setClipToOutline(true)
2)要設(shè)置圓角的View.setOutlineProvider(ViewOutlineProvider provider)
ViewOutlineProvider 只有1個(gè)抽象方法,通過(guò)Outline.setRoundRect設(shè)置圓角:
public abstract void getOutline(View view, Outline outline);
方法特點(diǎn):
1)對(duì)View設(shè)置,可View、ViewGroup
2)對(duì)4個(gè)角同時(shí)設(shè)置,不能單獨(dú)設(shè)置單個(gè)角
方法2:CardView
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginTop="@dimen/dp_6"
app:cardCornerRadius="@dimen/dp_24"
app:cardElevation="0dp"
app:cardUseCompatPadding="false">
<ImageView
android:id="@+id/image_view_2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="#93D5DC"/>
</androidx.cardview.widget.CardView>實(shí)現(xiàn)方法:
1)對(duì)需要設(shè)置圓角的View,使用CardView包裹
2)對(duì)CardView設(shè)置,設(shè)置圓角、去除陰影和padding
app:cardCornerRadius="@dimen/dp_24" app:cardElevation="0dp" app:cardUseCompatPadding="false"
方法特點(diǎn):
1)對(duì)View設(shè)置,可View、ViewGroup
2)對(duì)4個(gè)角同時(shí)設(shè)置,不能單獨(dú)設(shè)置單個(gè)角
方法3:自定義Drawable
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/dp_24"/>
<solid android:color="#2A5CAA"/>
</shape>實(shí)現(xiàn)方法:
1)自定義shape,設(shè)置radius
<corners android:radius="@dimen/dp_24"/>
方法特點(diǎn):
1)對(duì)生成的圖片進(jìn)行設(shè)置
2)可對(duì)4角同時(shí)設(shè)置,也可對(duì)4角單獨(dú)設(shè)置
<corners
android:bottomLeftRadius="@dimen/dp_24"
android:bottomRightRadius="@dimen/dp_24"
android:topLeftRadius="@dimen/dp_24"
android:topRightRadius="@dimen/dp_24"/>方法4:GradientDrawable和RoundedBitmapDrawable
//GradientDrawable
if(true) {
//同時(shí)設(shè)置四個(gè)角
GradientDrawable drawable = new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
drawable.setCornerRadius(radius);
drawable.setColor(0xFFEEA2A4);
((ImageView) getView(R.id.image_view_4)).setImageDrawable(drawable);
} else {
//單獨(dú)設(shè)置四個(gè)角
GradientDrawable drawable = new GradientDrawable();
drawable.setShape(GradientDrawable.RECTANGLE);
drawable.setColor(0xFFEEA2A4);
float[] radii = new float[]{
radius, radius,
0F, 0F,
0F, 0F,
radius, radius
};
drawable.setCornerRadii(radii);
((ImageView) getView(R.id.image_view_4)).setImageDrawable(drawable);
}實(shí)現(xiàn)方法:GradientDrawable
1)對(duì)GradientDrawable設(shè)置圓角drawable.setCornerRadius(radius)
2)或者對(duì)GradientDrawable設(shè)置float[],對(duì)4角單獨(dú)設(shè)置
float[] radii = new float[]{
radius, radius,
0F, 0F,
0F, 0F,
radius, radius
};
drawable.setCornerRadii(radii);方法特點(diǎn):GradientDrawable
1)對(duì)圖片進(jìn)行設(shè)置
2)可對(duì)4角同時(shí)設(shè)置,也可對(duì)4角單獨(dú)設(shè)置
實(shí)現(xiàn)方法:RoundedBitmapDrawable
RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create(getResources(),
ResourceUtils.drawable2Bitmap(ResourceUtils.getDrawable(R.drawable.drawable_90_corner_2)));
drawable.setCornerRadius(radius);
((ImageView) getView(R.id.image_view_4_2)).setImageDrawable(drawable);1)通過(guò)RoundedBitmapDrawableFactory創(chuàng)建RoundedBitmapDrawable,提供了三個(gè)實(shí)現(xiàn)方法:
public static RoundedBitmapDrawable create(@NonNull Resources res, @Nullable Bitmap bitmap) public static RoundedBitmapDrawable create(@NonNull Resources res, @NonNull String filepath) public static RoundedBitmapDrawable create(@NonNull Resources res, @NonNull InputStream is)
區(qū)別在于第2個(gè)參數(shù):Bitmap、filepath、InputStream
2)對(duì)RoundedBitmapDrawable設(shè)置setCornerRadius(radius)
方法特點(diǎn):RoundedBitmapDrawable
1)對(duì)圖片進(jìn)行設(shè)置
2)對(duì)4個(gè)角同時(shí)設(shè)置,不能單獨(dú)設(shè)置單個(gè)角
方法5:3方庫(kù),本例用Glide
//Glide
if(true) {
//同時(shí)設(shè)置四個(gè)角
Glide.with(this)
.asDrawable()
.load(R.drawable.drawable_90_corner)
.transform(new RoundedCorners(radius))
.into((ImageView) getView(R.id.image_view_5));
} else {
//單獨(dú)設(shè)置四個(gè)角
Glide.with(this)
.asDrawable()
.load(R.drawable.drawable_90_corner)
.transform(new GranularRoundedCorners(radius, radius, radius, radius))
.into((ImageView) getView(R.id.image_view_5));
}實(shí)現(xiàn)方法:
1)引入Glide,使用Glide加載圖片
2)設(shè)置transform(new RoundedCorners(radius))或者transform(new GranularRoundedCorners(radius, radius, radius, radius))
方法特點(diǎn):
1)對(duì)圖片進(jìn)行設(shè)置
2)可對(duì)4角同時(shí)設(shè)置,也可對(duì)4角單獨(dú)設(shè)置,只是方法不同
不同方法效果對(duì)比:

代碼地址:
AndroidJavaKotlin: 深度學(xué)習(xí)Android、Java、Kotlin (gitee.com)
總結(jié)
到此這篇關(guān)于Android圓角設(shè)置方法的文章就介紹到這了,更多相關(guān)Android圓角設(shè)置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android實(shí)現(xiàn)EditText添加下劃線
這篇文章主要為大家詳細(xì)介紹了Android如何實(shí)現(xiàn)給EditText添加下劃線,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08
Android實(shí)現(xiàn)長(zhǎng)按back鍵退出應(yīng)用程序的方法
這篇文章主要介紹了Android實(shí)現(xiàn)長(zhǎng)按back鍵退出應(yīng)用程序的方法,實(shí)例分析了Android按鈕事件的操作技巧,需要的朋友可以參考下2015-05-05
Android實(shí)現(xiàn)打開手機(jī)淘寶并自動(dòng)識(shí)別淘寶口令彈出商品信息功能
最近項(xiàng)目經(jīng)理給我們安排一個(gè)活兒,基于Android開發(fā)實(shí)現(xiàn)打開手機(jī)淘寶,并自動(dòng)識(shí)別淘口令,彈出商品信息,今天小編就抽空給大家分享下這個(gè)需求是怎么實(shí)現(xiàn)的,需要的朋友參考下吧2017-11-11
Android懸浮窗按鈕實(shí)現(xiàn)點(diǎn)擊并顯示/隱藏多功能列表
這篇文章主要為大家詳細(xì)介紹了Android懸浮窗按鈕實(shí)現(xiàn)點(diǎn)擊并顯示/隱藏多功能列表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Android多功能時(shí)鐘開發(fā)案例(實(shí)戰(zhàn)篇)
這篇文章主要為大家詳細(xì)介紹了Android多功能時(shí)鐘開發(fā)案例,開發(fā)了時(shí)鐘、鬧鐘、計(jì)時(shí)器和秒表,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
android編程開發(fā)之全屏和退出全屏的實(shí)現(xiàn)方法
這篇文章主要介紹了android編程開發(fā)之全屏和退出全屏的實(shí)現(xiàn)方法,以實(shí)例形式較為詳細(xì)的分析了Android全屏及退出全屏的頁(yè)面布局與功能實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Android中實(shí)現(xiàn)長(zhǎng)按修改ListView對(duì)象的內(nèi)容
這篇文章主要給大家介紹了在Android中實(shí)現(xiàn)長(zhǎng)按修改ListView對(duì)象內(nèi)容的相關(guān)資料,文中給出了完整的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-02-02

