android TextView 的圆角背景
2012-03-20 15:31
369 查看
实现方法:
定义类继承自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大小一致的圆角矩形了。
这里有一个例子(还包含了写其他功能的代码)
定义类继承自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===================================*/ }
相关文章推荐
- android 用代码分别实现textview的背景和圆角
- [置顶] android自定义view控件之一圆角背景TextView
- android 圆角边框、渐变背景的TextView
- (转)#小美化#Android给TextView设置透明背景、圆角边框
- Android给TextView设置透明背景、圆角边框
- Android给TextView和EditText等控件设置透明背景、圆角边框
- Android开发-TextView background 背景 颜色 圆角-AndroidStudio
- Android给TextView设置透明背景、圆角边框
- Android给TextView设置透明背景、圆角边框
- Android开发-TextView background 背景 颜色 圆角-AndroidStudio
- Android中TextView显示圆圈背景或设置圆角的方法
- Android给TextView设置透明背景、圆角边框
- Android给TextView设置透明背景、圆角边框
- Android自定义TextView实心圆角颜色背景(动态改变圆角背景颜色)
- Android Shape Drawable Resources TextView渐变 背景色 圆角
- android基础学习(2)-------修改TextView字体颜色和背景颜色
- [Android开发] 代码code设置9.png/9-patch 图片背景后,此view中的TextView等控件显示不正常(常见于listview中)
- android中TextView 添加ClickableSpan后点击选中文字背景问题
- android TextView 设置部分文字背景色和文字颜色
- Android TextView的点击效果之改变背景颜色