canvas教程

Android倾斜、描边、自定义字体的TextView

字号+ 作者:H5之家 来源:H5之家 2017-02-26 11:03 我要评论( )

在项目开发过程中,有许多需求让我们头大,各种不懂的开发的产品经理乱设计。需求是需要倾斜的,用特定的字体,还要带描边。上网了解了下相关资料后,能够灵活使

> 软件编程 > 安卓开发 >

Android倾斜、描边、自定义字体的TextView 2017-02-21 14:20 出处:清屏网 人气: 

在项目开发过程中,有许多需求让我们头大,各种不懂的开发的产品经理乱设计。需求是需要倾斜的,用特定的字体,还要带描边。上网了解了下相关资料后,能够灵活使用,满足需求。在这里分享一个关于这样的textview的开发。

第一步:下载好对应的文字库

我这里使用的是华文字体,所以网上下载个华文字体就好了。一般是这样的

Paste_Image.png

也有些后缀名是TTF,这个是一样的,不区分大小写的。。

接下来,在assets文件夹下新建一个文件夹:fonts。注意名字不要建错了。然后就把.ttf文件放进去就搞定了。

第二步:自定义个TextView

由于我们要用到倾斜,所以还是自定义一个TextView比较好,而且这样也方便使用,不然每个地方都要调用重复的方法多麻烦。

在写自定义TextView前,先了解下如何倾斜TextView,描边以及如何使用字体。

1、倾斜TextView:

这个是很简单的,在自定义TextView中,onDraw方法中利用canvas.rotate()就可以了,然后用你的TextView对象把canvas,draw进去就好。如下:

@Override

protected void onDraw(Canvas canvas)

{

//倾斜度45,上下左右居中

canvas.rotate(-7, getMeasuredWidth(), getMeasuredHeight());

outlineTextView.draw(canvas);

super.onDraw(canvas);

}

2、描边字体:

这个主要是用了TextPaint的几个属性而已,没有什么难度。

TextPaint paint = outlineTextView.getPaint();

paint.setStrokeWidth(15);// 描边宽度

paint.setStyle(Paint.Style.STROKE);

outlineTextView.setTextColor(Color.parseColor("#6ec520"));// 描边颜色

outlineTextView:自定义TextView对象

3、使用字体库。

AssetManager mgr = mContext.getAssets();

Typeface tf = Typeface.createFromAsset(mgr, "fonts/huawen.ttf");

DialogRateTextView title = (DialogRateTextView) layout.findViewById(R.id.dialog_title);

title.setTypeface(tf);

这样就搞定了。

4、做点设置就搞定了。也就几个重载方法。

a. @Override

public void setLayoutParams (ViewGroup.LayoutParams params)

{

super.setLayoutParams(params);

outlineTextView.setLayoutParams(params);

}

b. @Override

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

{

super.onMeasure(widthMeasureSpec, heightMeasureSpec);

// 设置轮廓文字

CharSequence outlineText = outlineTextView.getText();

if (outlineText == null || !outlineText.equals(this.getText()))

{

outlineTextView.setText(getText());

postInvalidate();

}

outlineTextView.measure(widthMeasureSpec, heightMeasureSpec);

}

c.@Override

protected void onLayout (boolean changed, int left, int top, int right, int bottom)

{

super.onLayout(changed, left, top, right, bottom);

outlineTextView.layout(left, top, right, bottom);

}

这样就全部搞定了。感觉是不是很简单。希望对大家有帮助。

给个类吧还是,之前是用在自定义dialog上的,之前po上来,懒得改名字了。

DialogRateTextView.java:

{ private TextView outlineTextView = null; private Context mContext; { super(context); mContext = context; outlineTextView = new TextView(context); init(); } { super(context, attrs); mContext = context; outlineTextView = new TextView(context, attrs); init(); } defStyle) { super(context, attrs, defStyle); mContext = context; outlineTextView = new TextView(context, attrs, defStyle); init(); } { TextPaint paint = outlineTextView.getPaint(); paint.setStrokeWidth(15);// 描边宽度 paint.setStyle(Paint.Style.STROKE); Typeface customFont = Typeface.createFromAsset(mContext.getAssets(), "fonts/huawen.ttf"); outlineTextView.setTypeface(customFont); outlineTextView.setTextColor(Color.parseColor("#6ec520"));// 描边颜色 outlineTextView.setGravity(getGravity()); } { super.setLayoutParams(params); outlineTextView.setLayoutParams(params); } widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // 设置轮廓文字 CharSequence outlineText = outlineTextView.getText(); if (outlineText == null || !outlineText.equals(this.getText())) { outlineTextView.setText(getText()); postInvalidate(); } outlineTextView.measure(widthMeasureSpec, heightMeasureSpec); } changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); outlineTextView.layout(left, top, right, bottom); } { //倾斜度45,上下左右居中 canvas.rotate(-7, getMeasuredWidth(), getMeasuredHeight()); outlineTextView.draw(canvas); super.onDraw(canvas); } }

分享给小伙伴们:

本文标签: TextView,Android/">TextView,Android

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

  • 本类最热新闻

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Android中圆角矩形和圆形的多种实现方式

      Android中圆角矩形和圆形的多种实现方式

      2017-02-24 12:03

    • 【自定义控件系列一】android画图类---Canvas浅谈

      【自定义控件系列一】android画图类---Canvas浅谈

      2017-02-24 09:55

    • 搭建qt for android环境

      搭建qt for android环境

      2017-02-22 12:04

    • HTML5能取代Android和iOS应用程序吗?

      HTML5能取代Android和iOS应用程序吗?

      2017-02-21 13:01

    网友点评