实现方法:

定义类继承自Shape画成圆角矩形

public class MyShape extends Shape{

@Override
public void draw(Canvas canvas, Paint paint) {
// TODO Auto-generated method stub
paint.setColor(Color.RED);

canvas.drawRoundRect(new RectF(0, 0, 200, 30), 8, 8, paint);
}

}


ShapeDrawable mShapeDrawable = new ShapeDrawable();
mShapeDrawable.setShape(new MyShape());
textview.setBackgroundDrawable(mShapeDrawable);


自定义一个继承自TextView的类。重写onDraw方法,在onDraw方法中获得

Textview的实际大小,然后把参数传给RectF就可以画一个跟View大小一致的圆角矩形了。


这里有一个例子(还包含了写其他功能的代码)

package com.textview.style;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.graphics.drawable.ShapeDrawable;import android.graphics.drawable.shapes.Shape;import android.text.TextPaint;import android.text.TextUtils;import android.util.AttributeSet;import android.util.Log;import android.widget.TextView;public class PatchView_New extends TextView{private static final String TAG = "lxy";private static final float ELLIPSIZE_COEFFICIENT = 12.0f;private RectF mRect ;private int mColor = Color.YELLOW;private ShapeDrawable mShapeDrawable;private String realString;private String showString;private int _num;public PatchView_New(Context context) {super(context);setWillNotDraw(false);drawDefaultBGColor();setSingleLine(true);//setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));Log.d(TAG, "__________________ PatchView_New().1 _____________________");}public PatchView_New(Context context, AttributeSet attrs) {super(context, attrs);setWillNotDraw(false);drawDefaultBGColor();setSingleLine(true);//setEllipsize(TextUtils.TruncateAt.valueOf("MIDDLE"));Log.d(TAG, "__________________ PatchView_New().2 _____________________");}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Log.d(TAG, "__________________ onDraw() _____________________ mRect = " + mRect);if(mRect == null){mRect = new RectF();}//mRect.left = this.getLeft();mRect.right = this.getRight() - this.getLeft();//mRect.top = this.getTop();mRect.bottom = this.getBottom() - this.getTop();Log.d(TAG, "mRect = " + mRect);Log.d(TAG, "______________ _num = " + _num);if(_num >= 1){//_num = 0;return;}_num ++;if(mRect.width() != 0 && mRect.height() != 0){showString = getRightDisplayString(realString, getAvail());Log.d(TAG, "onDraw()_______________showString = " + showString);this.setText(showString);}}public void drawDefaultBGColor(){if(mShapeDrawable == null){mShapeDrawable = new ShapeDrawable();}mShapeDrawable.setShape(new MyShape());setBackgroundDrawable(mShapeDrawable);}public void setMultiViewText(String headStr,String centerStr,  String tailStr){_num = 0;Log.d(TAG, "__________________ setMultiViewText() _____________________" + centerStr);realString = centerStr;setText(realString);}public void setCenterViewBGColor(int color){_num = 0;Log.d(TAG, "__________________ setCenterViewBGColor() _____________________" + color);this.mColor = color;}/*------------------------- 字符截断 START ---------------------- ----------*/private String getRightDisplayString(String real, float width){if(TextUtils.isEmpty(real)){return "";}return TextUtils.ellipsize(real, new TextPaint(), width, TextUtils.TruncateAt.valueOf("MIDDLE")).toString();}private float getAvail(){return ELLIPSIZE_COEFFICIENT * mRect.width()/getTextSize();}/*------------------------- END  ---------------------------------------*//*====================== Inner Class START===========================*/private class MyShape extends Shape{@Overridepublic void draw(Canvas canvas, Paint paint) {// TODO Auto-generated method stubpaint.setColor(mColor);Log.d(TAG, "__________________ draw() _____________________ mRect = " + mRect);if(mRect == null){mRect = new RectF();}canvas.drawRoundRect(mRect, 8f, 8f, paint);}}/*============================ END===================================*/}




更多相关文章

  1. Android测量字符串所占UI的大小
  2. android textview宽度固定的情况下字体大小自适应
  3. android获取资源文件R.drawable中的图片的相关方法
  4. android获取资源文件非主流方法
  5. Android权限申请:自带方法 + 第三方库实现
  6. Android 学习 之 关闭应用程序的方法
  7. 一个hello程序的android内核模块编译方法及在模拟器中进行测试结
  8. Android实现计时与倒计时(限时抢购)的几种方法(线程)
  9. Android 如何获取apk大小与时间

随机推荐

  1. 阿里云ECS centos6.8下安装配置MySql5.7
  2. MySql版本问题sql_mode=only_full_group_
  3. Mysql误操作后利用binlog2sql快速回滚的
  4. Windows下mysql5.7.18安装配置教程
  5. mysql中格式化数字详解
  6. Mysql事务操作失败如何解决
  7. mysql报错:Deadlock found when trying to
  8. 阿里云Linux CentOS 7.2下自建MySQL的roo
  9. Mybatis特殊字符处理的详解
  10. MySql索引详细介绍及正确使用方法