android TextView 的圆角背景
16lz
2021-01-23
实现方法:
定义类继承自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===================================*/}
更多相关文章
- Android测量字符串所占UI的大小
- android textview宽度固定的情况下字体大小自适应
- android获取资源文件R.drawable中的图片的相关方法
- android获取资源文件非主流方法
- Android权限申请:自带方法 + 第三方库实现
- Android 学习 之 关闭应用程序的方法
- 一个hello程序的android内核模块编译方法及在模拟器中进行测试结
- Android实现计时与倒计时(限时抢购)的几种方法(线程)
- Android 如何获取apk大小与时间