Android實現(xiàn)傾斜角標樣式
前言
最近產(chǎn)品有一個需求是:要在一個距形卡片上做一個傾斜的Tag,類似:
(PS:不要注意那兩毛三分的窮鬼),剛開始想著用UI切圖就可以了嘛,but是不可以的,在不同手機上分辨率是不同的,直接用圖片適配肯定會有問題,所以打算自定義。
實現(xiàn)思路
額畫圖太丑了,這里解釋一下:這里以左上角為例,我們可以把手機屏幕看成是一個直角坐標軸,我們要畫一個斜角標示,只需要在我們的距形框內(nèi)畫一個正方形通過正方形的對角線(這里必須是正方形,這樣可以控制x,y等距離),這樣操控斜角標示長度只需要控制對角線長度通過path方法來繪制路徑,右邊同理,我們也不需要過多計算,只需要通過moveTo方法移動坐標原點。
而繪制字體呢以對角線中心為坐標原點像左右繪制通過canvas.rotate()
設置字體傾斜于對角線平行。效果如下:
核心代碼
繪制背景色
case TAG_LEFT: path.lineTo(0, mHeight); path.lineTo(mWidth, 0); break; case TAG_Right: path.lineTo(mWidth, 0); path.lineTo(mWidth, mHeight); break; case TAG_LEFT_BOTTOM: path.lineTo(mWidth, mHeight); path.lineTo(0, mHeight); break; case TAG_RIGHT_BOTTOM: path.moveTo(0, mHeight);//移動坐標原點位置 path.lineTo(mWidth, mHeight); path.lineTo(mWidth, 0); break; case TAG_LEFT_BAR: path.moveTo(mWidth, 0); path.lineTo(0, mHeight); path.lineTo(0, mHeight - mySlantedHeight); path.lineTo(mWidth - mySlantedHeight, 0); break; case TAG_RIGHT_BAR: path.lineTo(mWidth, mHeight); path.lineTo(mWidth, mHeight - mySlantedHeight); path.lineTo(mySlantedHeight, 0); break; case TAG_LEFT_BOTTOM_BAR: path.lineTo(mWidth, mHeight); path.lineTo(mWidth - mySlantedHeight, mHeight); path.lineTo(0, mySlantedHeight); break; case TAG_RIGHT_BOTTOM_BAR: path.moveTo(0, mHeight); path.lineTo(mySlantedHeight, mHeight); path.lineTo(mWidth, mySlantedHeight); path.lineTo(mWidth, 0); break;
通過計算繪制字體和角度
rect = new Rect(0, 0, w, h); rectF = new RectF(rect); rectF.right = mTextPaint.measureText(myText, 0, myText.length()); rectF.bottom = mTextPaint.descent() - mTextPaint.ascent();//Ascent: 字符頂部到baseLine的距離 Descent: 字符底部到baseLine的距離 rectF.left += (rect.width() - rectF.right) / 2.0f; rectF.top += (rect.height() - rectF.bottom) / 2.0f; xy[0] = rectF.left; xy[1] = rectF.top - mTextPaint.ascent(); xy[2] = w / 2; xy[3] = h / 2; xy[4] = -ROTATE_ANGLE; //設置字體 canvas.rotate(angle, centerX, centerY); canvas.drawText(myText, toX, toY + PADDING_TOP, mTextPaint);
使用方法
testView.setText("打折中") .setMode(TAG_LEFT_BAR) .setBackground(Color.parseColor("#ff6677")) .setTextColor(Color.parseColor("#000000")) .setSlantedHeight(50) .setTextSize(29); 或直接在布局中 <com.example.mylibrary.mySlantedTextView android:layout_width="80dp" android:layout_height="80dp" android:layout_alignParentTop="true" android:layout_alignParentRight="true" app:myBackgroundColor="#667fff" app:mySlantedHeight="30dp" app:myText="熱賣中" app:myTextColor="#ffffff" app:myTextSize="16sp" app:tagModel="right_bar" />
常用API
API名稱 | 介紹 |
---|---|
myBackgroundColor | 斜角背景顏色 |
mySlantedHeight | 斜角高度 |
myText | 字體展示 |
tagModel | 樣式模式共八種 |
myTextSize | 字體大小 |
myTextColor | 字體顏色 |
源碼見github
總結(jié)
以上所述是小編給大家介紹的Android實現(xiàn)傾斜角標樣式,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
- Android給任何view添加全屏傾斜水印
- Android中TextView和ImageView實現(xiàn)傾斜效果
- Android自定義TextView實現(xiàn)文字傾斜效果
- 最近較流行的效果 Android自定義View實現(xiàn)傾斜列表/圖片
- Android開發(fā)之React Navigation 導航欄樣式調(diào)整+底部角標消息提示
- Android 實現(xiàn)帶角標的ImageView(微博,QQ消息提示)
- Android為應用添加數(shù)字角標的簡單實現(xiàn)
- Android 實現(xiàn)桌面未讀角標
- Android實現(xiàn)購物車及其他功能的角標
相關(guān)文章
解決RecyclerView無法onItemClick問題的兩種方法
這篇文章主要介紹了解決RecyclerView無法onItemClick問題的相關(guān)知識,非常不錯,具有參考借鑒價值,感興趣的朋友一起看下吧2016-07-07Android搜索結(jié)果顯示高亮實例(有數(shù)據(jù)滑動底部自動刷新)
本篇文章主要介紹了Android搜索結(jié)果顯示高亮實例(有數(shù)據(jù)滑動底部自動刷新),非常具有實用價值,需要的朋友可以參考下2017-04-04Flutter學習LogUtil封裝與實現(xiàn)實例詳解
這篇文章主要為大家介紹了Flutter學習LogUtil封裝與實現(xiàn)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09