<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      安卓筆記俠

      專注安卓開發

      導航

      SpannableStringBuilder實現圖文混排

      1.我的后面添加圖片

      ssb = new SpannableStringBuilder("我的后面添加圖片:  ");
      ssb.setSpan(new ImageSpan(this, R.mipmap.ic_launcher), 9, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

       

       2.我的中間添加圖片

      ssb = new SpannableStringBuilder("我的中 間添加圖片  ");
      ssb.setSpan(new ImageSpan(this, R.mipmap.ic_launcher), 3, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

       

       3.圖片點擊事件的處理

      ssb = new SpannableStringBuilder("圖片點擊事件的處理  ");
      ssb.setSpan(new ImageSpan(this, R.mipmap.ic_launcher), 3, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
      ssb.setSpan(new ClickableSpan() {
          @Override
          public void onClick(View widget) {
            Toast.makeText(MainActivity.this, "圖片點擊事件的處理 ", Toast.LENGTH_SHORT).show();
          }
      }, 3, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

       4.背景帶圓角,可設置顏色,角度

       1 if (position % 2 == 0) {
       2     strShow = "300英雄" + homeDataBean.User + ":" + homeDataBean.Content;
       3     spannable = new SpannableStringBuilder(strShow);
       4     spannable.setSpan(new RadiusBackgroundSpan(Color.parseColor("#fdc14f"), 10),
       5             0, 5, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
       6 } else {
       7     strShow = "槍界" + homeDataBean.User + ":" + homeDataBean.Content;
       8     spannable = new SpannableStringBuilder(strShow);
       9     spannable.setSpan(new RadiusBackgroundSpan(Color.parseColor("#9885fc"), 10),
      10             0, 2, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
      11 }

       

       1 /**
       2  * 背景帶圓角,可設置顏色,角度
       3  * Created by g on 2018/1/23.
       4  */
       5 public class RadiusBackgroundSpan extends ReplacementSpan {
       6 
       7     private int mSize;
       8     private int mColor;
       9     private int mRadius;
      10 
      11     /**
      12      * @param color  背景顏色
      13      * @param radius 圓角半徑
      14      */
      15     public RadiusBackgroundSpan(int color, int radius) {
      16         mColor = color;
      17         mRadius = radius;
      18     }
      19 
      20     @Override
      21     public int getSize(Paint paint, CharSequence text, int start, int end, Paint.FontMetricsInt fm) {
      22         mSize = (int) (paint.measureText(text, start, end) + 2 * mRadius);
      23         //mSize就是span的寬度,span有多寬,開發者可以在這里隨便定義規則
      24         //我的規則:這里text傳入的是SpannableString,start,end對應setSpan方法相關參數
      25         //可以根據傳入起始截至位置獲得截取文字的寬度,最后加上左右兩個圓角的半徑得到span寬度
      26         return mSize;
      27     }
      28 
      29     @Override
      30     public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
      31         int color = paint.getColor();//保存文字顏色
      32         paint.setColor(mColor);//設置背景顏色
      33         paint.setAntiAlias(true);// 設置畫筆的鋸齒效果
      34         RectF oval = new RectF(x, y + paint.ascent(), x + mSize, y + paint.descent());
      35         //設置文字背景矩形,x為span其實左上角相對整個TextView的x值,y為span左上角相對整個View的y值。paint.ascent()獲得文字上邊緣,paint.descent()獲得文字下邊緣
      36         canvas.drawRoundRect(oval, mRadius, mRadius, paint);//繪制圓角矩形,第二個參數是x半徑,第三個參數是y半徑
      37         paint.setColor(color);//恢復畫筆的文字顏色
      38         canvas.drawText(text, start, end, x + mRadius, y, paint);//繪制文字
      39     }
      40 }

       

      6.設置圖標:

      if (!TextUtils.isEmpty(tagHorn)) {
       int sixe = ScreenUtils.sp2px(mContext, 15);
          EmojiconSpan imageSpan = new EmojiconSpan(mContext, R.mipmap.laba_icon,
                  (int) (sixe), DynamicDrawableSpan.ALIGN_BASELINE, (int) (sixe));
          spannable.setSpan(imageSpan, strShow.indexOf(tagHorn), strShow.indexOf(tagHorn) + tagHorn.length(),
                  Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
      }

       

      public class EmojiconSpan extends DynamicDrawableSpan {
          private final Context mContext;
      
          private final int mResourceId;
      
          private final int mSize;
      
          private final int mTextSize;
      
          private int mHeight;
      
          private int mWidth;
      
          private int mTop;
      
          private Drawable mDrawable;
      
          private WeakReference<Drawable> mDrawableRef;
      
          int nment = 5;
      
          public EmojiconSpan(Context context, int resourceId, int size, int alignment, int textSize) {
              super(alignment);
              mContext = context;
              mResourceId = resourceId;
              mWidth = mHeight = mSize = size;
              mTextSize = textSize;
          }
      
          public Drawable getDrawable() {
              if (mDrawable == null) {
                  try {
                      mDrawable = mContext.getResources().getDrawable(mResourceId);
                      mHeight = mSize;
                      mWidth = mHeight * mDrawable.getIntrinsicWidth() / mDrawable.getIntrinsicHeight();
                      mTop = (mTextSize - mHeight) / 2;
                      mDrawable.setBounds(0, mTop - nment, mWidth, mTop + mHeight);
                  } catch (Exception e) {
                      LogUtils.d(e.toString());
                  }
              }
              return mDrawable;
          }
      
          @Override
          public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) {
              //super.draw(canvas, text, start, end, x, top, y, bottom, paint);
              Drawable b = getCachedDrawable();
              canvas.save();
      
              int transY = bottom - b.getBounds().bottom;
              if (mVerticalAlignment == ALIGN_BASELINE) {
                  transY = top + ((bottom - top) / 2) - ((b.getBounds().bottom - b.getBounds().top) / 2) - mTop;
              }
      
              canvas.translate(x, transY);
              b.draw(canvas);
              canvas.restore();
          }
      
          private Drawable getCachedDrawable() {
              if (mDrawableRef == null || mDrawableRef.get() == null) {
                  mDrawableRef = new WeakReference<Drawable>(getDrawable());
              }
              return mDrawableRef.get();
          }
      }

       

       

       

       

      https://blog.csdn.net/qq_33220645/article/details/53332834

      posted on 2019-10-16 21:44  安卓筆記俠  閱讀(1898)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 国内精品久久人妻无码妲| 久久天堂无码av网站| 国产精品中文字幕二区| 4hu四虎永久免费地址ww416| 五月天免费中文字幕av| 久久精品国产蜜臀av| 国产av一区二区三区| 日本免费人成视频在线观看| 不卡一区二区国产在线| 国产乱沈阳女人高潮乱叫老| 九九综合va免费看| 国产精品国产三级国产试看 | 国产中文字幕久久黄色片| 乱老年女人伦免费视频| 国产农村妇女aaaaa视频| 国产SUV精品一区二区88L| 中文字幕无码不卡一区二区三区| 亚洲熟少妇一区二区三区| 日韩中文字幕在线不卡一区| 亚洲av产在线精品亚洲第一站| 少妇人妻系列无码专区视频| 亚洲熟妇熟女久久精品综合| 国产欧美综合在线观看第十页| 色爱综合激情五月激情| 久久精品国产亚洲精品2020| 少妇久久久被弄到高潮| 九九热中文字幕在线视频| 日韩av高清在线看片| 国产一区日韩二区三区| 性按摩玩人妻hd中文字幕| 麻豆精品一区二区三区蜜臀| 波多野结衣久久一区二区| 成人免费无遮挡在线播放| 熟女人妻aⅴ一区二区三区电影| 亚洲AV成人片不卡无码| 亚洲人妻av伦理| 99国产精品一区二区蜜臀| 偷拍专区一区二区三区| 云阳县| 亚洲精品揄拍自拍首页一| 日本一区二区三区专线|