zoukankan      html  css  js  c++  java
  • 文字描边--效果

    package com.bn.ex12d;
    
    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Paint.Style;
    import android.text.TextPaint;
    import android.util.AttributeSet;
    import android.view.ViewGroup;
    import android.widget.TextView;
    /*
     * StrokeTextView的目标是给文字描边
     * 实现方法是两个TextView叠加,只有描边的TextView为底,实体TextView叠加在上面
     * 看上去文字就有个不同颜色的边框了
     */
    public class StrokeTextView extends TextView {
     
        private TextView borderText = null;///用于描边的TextView
     
        public StrokeTextView(Context context) {
            super(context);
            borderText = new TextView(context);
            init();
        }
     
        public StrokeTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
            borderText = new TextView(context,attrs);
            init();
        }
     
        public StrokeTextView(Context context, AttributeSet attrs,
                int defStyle) {
            super(context, attrs, defStyle);
            borderText = new TextView(context,attrs,defStyle);
            init();
        }
     
        public void init(){
            TextPaint tp1 = borderText.getPaint(); 
            tp1.setStrokeWidth(18);                                  //设置描边宽度
            tp1.setStyle(Style.STROKE);                             //对文字只描边
            borderText.setTextColor(getResources().getColor(R.color.colorSeleter17));  //设置描边颜色
            borderText.setGravity(getGravity());
        }
     
        @Override
        public void setLayoutParams (ViewGroup.LayoutParams params){
            super.setLayoutParams(params);
            borderText.setLayoutParams(params);
        }
     
        @Override
        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            CharSequence tt = borderText.getText();
             
            //两个TextView上的文字必须一致
            if(tt== null || !tt.equals(this.getText())){
                borderText.setText(getText());
                this.postInvalidate();
            }
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            borderText.measure(widthMeasureSpec, heightMeasureSpec);
        }
     
        protected void onLayout (boolean changed, int left, int top, int right, int bottom){
            super.onLayout(changed, left, top, right, bottom);
            borderText.layout(left, top, right, bottom);
        }
     
        @Override
        protected void onDraw(Canvas canvas) {
            borderText.draw(canvas);
            super.onDraw(canvas);
        }
     
    }
    

      

  • 相关阅读:
    HomeWork2
    An error I have completed recently
    C#之规格说明书
    App上架审核指南翻译
    使用CollectionView做横向滑动分页效果:
    推荐一些CSS命名规范
    关于让左右2个DIV高度相等
    带有缩略图和文字提示的轮播图
    动画的定义:
    .Net基础篇_学习笔记_第五天_流程控制while循环002
  • 原文地址:https://www.cnblogs.com/clarence/p/3919408.html
Copyright © 2011-2022 走看看