溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android實現傾斜角標樣式的方法

發布時間:2021-04-16 09:50:52 來源:億速云 閱讀:213 作者:小新 欄目:移動開發

這篇文章給大家分享的是有關Android實現傾斜角標樣式的方法的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

前言

最近產品有一個需求是:要在一個距形卡片上做一個傾斜的Tag,類似:

Android實現傾斜角標樣式的方法

(PS:不要注意那兩毛三分的窮鬼),剛開始想著用UI切圖就可以了嘛,but是不可以的,在不同手機上分辨率是不同的,直接用圖片適配肯定會有問題,所以打算自定義。

實現思路

Android實現傾斜角標樣式的方法

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

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

Android實現傾斜角標樣式的方法

核心代碼

繪制背景色

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字體顏色

感謝各位的閱讀!關于“Android實現傾斜角標樣式的方法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女