最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android自定義帶拼音音調(diào)Textview

 更新時間:2019年01月03日 08:34:28   作者:maoamade  
這篇文章主要介紹了Android自定義帶拼音音調(diào)的Textview,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Android自定義帶拼音音調(diào)Textview的具體代碼,供大家參考,具體內(nèi)容如下

1.拼音textview,簡單的為把拼音數(shù)組和漢字數(shù)組結(jié)合在一起多行顯示

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.widget.TextView;
import com.cgtn.chineselearning.utils.ChineseCharacter2Spell;
import com.cgtn.common.utils.ConvertUtils;

@SuppressLint("AppCompatCustomView")
public class SpellTextView extends TextView {
  private String[] pinyin;
  private String[] chinese;

  private TextPaint textPaintSpell = new TextPaint(Paint.ANTI_ALIAS_FLAG);
  private TextPaint textPaintChinese = new TextPaint(Paint.ANTI_ALIAS_FLAG);

  private int fontSizeSpell = ConvertUtils.dp2px(12);
  private int fontSizeChinese = ConvertUtils.dp2px(12);

  private int colorSpell = Color.parseColor("#1b97d6");
  private int colorChinese = Color.parseColor("#000000");
  public SpellTextView(Context context) {
    super(context);
  }

  public SpellTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }

  public SpellTextView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initTextPaint();
  }

  public void initTextPaint() {
    float denity = getResources().getDisplayMetrics().density;
    textPaintSpell.setStrokeWidth(denity);
    textPaintChinese.setStrokeWidth(denity);
    textPaintSpell.setTextAlign(Paint.Align.LEFT);
    textPaintChinese.setTextAlign(Paint.Align.LEFT);
    //設(shè)置字體大小
    textPaintSpell.setTextSize(fontSizeSpell);
    textPaintChinese.setTextSize(fontSizeChinese);
    textPaintSpell.setColor(colorSpell);
    textPaintChinese.setColor(colorChinese);
  }

  @Override
  protected void onDraw(Canvas canvas) {
    float widthMesure = 0f;
    int comlum = 1;
    float pinyinWidth;
    if (pinyin != null && pinyin.length > 0) {
      for (int index = 0; index < pinyin.length; index++) {
        pinyinWidth = widthMesure + textPaintSpell.measureText(pinyin[index]);
        if (pinyinWidth > getWidth()) {
          comlum++;
          widthMesure = 0;
        }
        canvas.drawText(pinyin[index], widthMesure, (comlum * 2 - 1) * (textPaintChinese.getFontSpacing()), textPaintSpell);
        canvas.drawText(chinese[index],
            widthMesure + (textPaintSpell.measureText(pinyin[index]) - textPaintChinese.measureText(chinese[index])) / 2,
            (comlum * 2) * (textPaintChinese.getFontSpacing()), textPaintChinese);
        if (index + 1 < pinyin.length) {
          widthMesure = widthMesure + textPaintSpell.measureText(pinyin[index] + 1);
        } else {
          widthMesure = widthMesure + textPaintSpell.measureText(pinyin[index]);
        }
      }
    }
  }

  //拼音和漢字的資源
  public void setSpellAndChinese(String[] pinYin, String[] chinese) {
    this.pinyin = pinYin;
    this.chinese = chinese;
  }

  //設(shè)置文字資源
  public void setStringResource(String string) {
    initTextPaint();
    String[] spellArray = ChineseCharacter2Spell.getPinyinString(string);
    StringBuilder stringBuilder = new StringBuilder();
    for (String s : spellArray){
      stringBuilder.append(s);
      stringBuilder.append(" ");
    }

    char[] chars = string.toCharArray();
    String[] chineseArray = new String[chars.length];
    for (int i = 0; i < chars.length;i++){
      chineseArray[i] = String.valueOf(chars[i]);
    }
    setSpellAndChinese(spellArray,chineseArray);
  }

  //設(shè)置文字顏色
  public void setStringColor(int spellColor,int chineseColor) {
    textPaintSpell.setColor(spellColor);
    textPaintChinese.setColor(chineseColor);
  }

  //設(shè)置文字大小
  public void setFontSize(float spellFontSize,float chineseFontSize) {
    textPaintSpell.setTextSize(ConvertUtils.dp2px(spellFontSize));
    textPaintChinese.setTextSize(ConvertUtils.dp2px(chineseFontSize));
  }
}

2.漢字轉(zhuǎn)拼音使用 implementation ‘com.belerweb:pinyin4j:2.5.0'

public static String[] getPinyinString(String character) {
  if (character != null && character.length() > 0) {
    String[] pinyin = new String[character.length()];
    HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
    format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
    format.setToneType(HanyuPinyinToneType.WITH_TONE_MARK);
    format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE);
    for (int index = 0; index < character.length(); index++) {
      char c = character.charAt(index);
      try {
        String[] pinyinUnit = PinyinHelper.toHanyuPinyinStringArray(c, format);
        if (pinyinUnit == null) {
          pinyin[index] = " ";
        } else {
          pinyin[index] = pinyinUnit[0];
        }
      } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
        badHanyuPinyinOutputFormatCombination.printStackTrace();
      }

    }
    return pinyin;
  } else {
    return null;
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android編程實現(xiàn)可滑動的開關(guān)效果(附demo源碼下載)

    Android編程實現(xiàn)可滑動的開關(guān)效果(附demo源碼下載)

    這篇文章主要介紹了Android編程實現(xiàn)可滑動的開關(guān)效果,涉及Android的布局與控件設(shè)置技巧,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下
    2016-04-04
  • Android實現(xiàn)鬧鐘功能小Dome

    Android實現(xiàn)鬧鐘功能小Dome

    本篇文章主要介紹了Android實現(xiàn)鬧鐘功能小Dome,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Android多媒體之VideoView視頻播放器

    Android多媒體之VideoView視頻播放器

    這篇文章主要為大家詳細介紹了Android多媒體之VideoView視頻播放器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Android實現(xiàn)左側(cè)滑動菜單

    Android實現(xiàn)左側(cè)滑動菜單

    這篇文章主要為大家詳細介紹了Android實現(xiàn)左側(cè)滑動菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Android 安全加密:Https編程詳解

    Android 安全加密:Https編程詳解

    本文主要介紹Android安全加密Https編程的知識,這里整理了詳細的資料及說明解決方案和驗證,有興趣的小伙伴可以參考下
    2016-09-09
  • 詳解Android Studio Git分支實踐

    詳解Android Studio Git分支實踐

    這篇文章主要介紹了Android Studio Git分支實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android 調(diào)用百度地圖API示例

    Android 調(diào)用百度地圖API示例

    在Android開發(fā)中有一個非常重要的應(yīng)用就是實時定位,通過手機在手機地圖上進行實時定位,定位當(dāng)前手機的位置,這篇文章主要介紹了Android 調(diào)用百度地圖API示例,有興趣的可以了解一下。
    2017-01-01
  • Android實現(xiàn)視頻的畫中畫功能

    Android實現(xiàn)視頻的畫中畫功能

    手機觀看視頻的時候,有些工作需要溝通,或者參與搶購活動,同時為了不錯過視頻精彩片段,會選擇畫中畫模式,這篇文章主要為大家詳細介紹了Android實現(xiàn)視頻的畫中畫功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Android水波紋載入控件CircleWaterWaveView使用詳解

    Android水波紋載入控件CircleWaterWaveView使用詳解

    這篇文章主要為大家詳細介紹了Android水波紋載入控件CircleWaterWaveView使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Android studio導(dǎo)出APP測試包和構(gòu)建正式簽名包

    Android studio導(dǎo)出APP測試包和構(gòu)建正式簽名包

    大家好,本篇文章主要講的是Android studio導(dǎo)出APP測試包和構(gòu)建正式簽名包,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2021-12-12

最新評論

布尔津县| 怀安县| 措勤县| 安阳市| 潍坊市| 措美县| 清丰县| 巴马| 平邑县| 湾仔区| 广昌县| 隆德县| 鄂尔多斯市| 重庆市| 辰溪县| 崇信县| 班玛县| 读书| 昆山市| 逊克县| 资溪县| 从化市| 邯郸县| 宁陕县| 西昌市| 梓潼县| 清新县| 英山县| 林州市| 宜州市| 鄄城县| 阿巴嘎旗| 普兰店市| 新乐市| 泽州县| 西安市| 固镇县| 天镇县| 师宗县| 曲沃县| 开封市|