溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android中怎么實(shí)現(xiàn)一個(gè)傾斜角標(biāo)樣式

發(fā)布時(shí)間:2021-07-27 18:14:48 來源:億速云 閱讀:135 作者:Leah 欄目:編程語言

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)Android中怎么實(shí)現(xiàn)一個(gè)傾斜角標(biāo)樣式,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

實(shí)現(xiàn)思路

額畫圖太丑了,這里解釋一下:這里以左上角為例,我們可以把手機(jī)屏幕看成是一個(gè)直角坐標(biāo)軸,我們要畫一個(gè)斜角標(biāo)示,只需要在我們的距形框內(nèi)畫一個(gè)正方形通過正方形的對(duì)角線(這里必須是正方形,這樣可以控制x,y等距離),這樣操控斜角標(biāo)示長(zhǎng)度只需要控制對(duì)角線長(zhǎng)度通過path方法來繪制路徑,右邊同理,我們也不需要過多計(jì)算,只需要通過moveTo方法移動(dòng)坐標(biāo)原點(diǎn)。

而繪制字體呢以對(duì)角線中心為坐標(biāo)原點(diǎn)像左右繪制通過canvas.rotate()設(shè)置字體傾斜于對(duì)角線平行。效果如下:

核心代碼

繪制背景色

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);//移動(dòng)坐標(biāo)原點(diǎn)位置        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;

通過計(jì)算繪制字體和角度

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;        //設(shè)置字體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

myBackgroundColor斜角背景顏色mySlantedHeight斜角高度myText字體展示tagModel樣式模式共八種myTextSize字體大小myTextColor字體顏色

上述就是小編為大家分享的Android中怎么實(shí)現(xiàn)一個(gè)傾斜角標(biāo)樣式了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI