实现方法:
定义类继承自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 _____________________");
}
@Override
protected 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{
@Override
public void draw(Canvas canvas, Paint paint) {
// TODO Auto-generated method stub
paint.setColor(mColor);
Log.d(TAG, "__________________ draw() _____________________ mRect = " + mRect);
if(mRect == null){
mRect = new RectF();
}
canvas.drawRoundRect(mRect, 8f, 8f, paint);
}
}
/*============================ END===================================*/
}