你可以使用shape定義一個(gè)圓角矩形,并將其作為布局的背景即可。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了子長(zhǎng)免費(fèi)建站歡迎大家使用!
圓角矩形的shape代碼如下:
//定義四個(gè)圓角 文件名shape_round_corner
shape xmlns:android=""
solid android:color="#ff00" /
corners android:topLeftRadius="12dp"
android:topRightRadius="12dp"
android:bottomRightRadius="12dp"
android:bottomLeftRadius="12dp"/
stroke android:width="1dp" android:color="#ff0" /
/shape
設(shè)置背景代碼如下:
LinearLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_marginBottom="10dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:alpha="0.8"
android:background="@drawable/shape_round_corner"
/LinearLayout
我們要實(shí)現(xiàn)的圖片控件繼承自 AppCompatImageView ,它是 ImageView 的子類,但提供了更好的兼容性,我們?cè)诖嘶A(chǔ)上添加了若干自定義的屬性和方法以實(shí)現(xiàn)最終的 NiceImageView :
要實(shí)圓角或者圓形的顯示效果,就是對(duì)圖片顯示的內(nèi)容區(qū)域進(jìn)行“裁剪”,只顯示指定的區(qū)域即可。如何做呢?
一種比較直接的辦法是這樣的,由于圖片是被繪制在畫布上的,所以用 canvas 的 clipPath() 方法先將畫布裁剪成指定形狀,這樣就能讓圖片按指定形狀顯示了,重新 draw() 方法即可:
這樣使用 src 、 background 屬性給ImageView設(shè)置顯示的圖片都能達(dá)到預(yù)期的顯示效果。但是由于 clipPath() 方法不支持抗鋸齒,圖片邊緣會(huì)有明顯的毛糙感,體驗(yàn)并不理想,所以需要尋找其它方法。
另一種方法是使用圖像的 Alpha 合成模式 ,即
PorterDuff 來實(shí)現(xiàn), 官方文檔 。這里我們使用其中的 DST_IN 模式。整個(gè)過程就是先繪制目標(biāo)圖像,也就是圖片;再繪制原圖像,即一個(gè)圓角矩形或者圓形,這樣最終目標(biāo)圖像只顯示和原圖像重合的區(qū)域。
到這里就實(shí)現(xiàn)了顯示為圓角或者圓形了。但是需要通過 src 屬性或者對(duì)應(yīng)的方法來設(shè)置圖片,否則不能達(dá)到預(yù)期效果。
繪制邊框就相對(duì)容易理解了,只需要繪制一個(gè)指定樣式的圓角矩形或者圓形即可:
當(dāng)圖片顯示為圓形時(shí),還可以繪制一個(gè)內(nèi)邊框,但圓角矩形的話由于圓角大小的問題,目前只能設(shè)置一個(gè)邊框咯。
但是有個(gè)問題,繪制的邊框會(huì)覆蓋在圖片上,如果邊框太寬會(huì)導(dǎo)致圖片的可見區(qū)域變小了,影像顯示效果,像這樣,左下角的花盆不見了:
那么如何讓邊框不覆蓋在圖片上呢?可以在 Alpha 合成繪制前先將畫布縮小一定比例,最后再繪制邊框,這樣問題就解決了。
縮放后的ImageView顯示區(qū)域的寬高就是原寬、高分別減去2倍的邊框?qū)挾龋@樣縮小的比例也就顯而易見了。效果如下,左下角的花盆出來了:
遮罩可以理解為一層帶透明度的顏色,遮罩默認(rèn)不繪制,當(dāng)制定了遮罩顏色時(shí)才會(huì)繪制,實(shí)現(xiàn)很簡(jiǎn)單:
例如加一個(gè)透明度30%的紅色遮罩后的效果:
核心的實(shí)現(xiàn)邏輯就這些了,剩下的就是自定義屬性和方法了,有興趣的可以看源碼,都很簡(jiǎn)單,希望對(duì)你有所幫助吧!
更多細(xì)節(jié)及用法見GitHub:
如果你需要實(shí)現(xiàn)類似釘釘?shù)膱A形組合頭像,例如:
你說的大部分都是國(guó)產(chǎn)app吧,例如嗶哩嗶哩動(dòng)畫,雖然界面是符合Android Design 的,但是icon依然是iOS風(fēng)、不符合Android Design 的圓角矩形,不過他們大部分也都是被MIUI帶壞的=.=
關(guān)于icon的樣式,Android Design 的官方文檔有詳細(xì)的介紹,先上原文鏈接(Iconography | Android Developers)
Use a distinct silhouette. Three-dimensional, front view, with a slight perspective as if viewed from above, so that users perceive some depth.可以看出來,Google 對(duì)icon 有以下幾個(gè)要求:
輪廓鮮明(iOS app 的icon 就是一個(gè)反例)
要有立體感 (iOS 再次中槍)
像是從正面斜上一定角度看到的一樣,使之看上去有深度(iOS 已經(jīng)身亡)
綜上所述,一切使用圓角矩形圖標(biāo)的Android 應(yīng)用都是在耍流氓。
============================第二次打分割線=============================
關(guān)于Android 應(yīng)用圖標(biāo)的更多標(biāo)準(zhǔn),可以參照NovaDNG發(fā)表在鋒客網(wǎng)上的兩篇文章
? 如何設(shè)計(jì)符合 Android Design 的應(yīng)用圖標(biāo) 鋒客網(wǎng)
? 如何制作一個(gè)漂亮的 Android 應(yīng)用圖標(biāo) 鋒客網(wǎng)
如果你是在自定義view的onDraw方法中:
RectF?rectF?=?new?RectF(100?,100?,500?,500);//先畫一個(gè)矩形
Paint?paint?=?new?Paint(Paint.ANTI_ALIAS_FLAG);//創(chuàng)建畫筆
paint.setColor(R.color.colorAccent);//添加畫筆顏色
canvas.drawRoundRect(rectF?,?30?,30?,?paint);//根據(jù)提供的矩形為四個(gè)角畫弧線,(其中的數(shù)字:第一個(gè)表示X軸方向大小,第二個(gè)Y軸方向大小??梢愿某善渌?,你可以自己體驗(yàn)),最后添加畫筆。
如果你是在布局中直接添加,樓上已經(jīng)做出方法,我就不舉例了。
用shapedrawable畫一個(gè)圓角矩形作為按鈕的background,但是圓角的地方總是有點(diǎn)粗,和直接用xml做出來的背景不一樣
float[]
outerR = new float[] { 20f, 20f, 20f, 20f, 0, 0, 0, 0 };
Shape shape = new
RoundRectShape(outerR, null, null);
image.setBackgroundDrawable(new
CustomShapeDrawable(shape,0xffea0000));
class CustomShapeDrawable extends
ShapeDrawable {
int color ;
public CustomShapeDrawable(Shape s,int
color) {
super(s);
this.color =
color;
}
@Override
protected void onDraw(Shape shape, Canvas
canvas, Paint paint) {
paint.setStrokeJoin(Join.ROUND);
paint.setDither(true);
paint.setAntiAlias(true);
paint.setStyle(Style.STROKE);
paint.setColor(0xffea0000);
paint.setStrokeWidth(4f);
shape.draw(canvas, paint);
}
}
把paint.setStrokeJoin這行去掉再試試
網(wǎng)頁(yè)標(biāo)題:android矩形圓角,安卓圖標(biāo)圓角規(guī)范
本文路徑:http://jinyejixie.com/article10/dssdddo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站營(yíng)銷、品牌網(wǎng)站制作、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)