Android中实现虚线边框包裹文字的两种方式
2016-09-05 21:45
369 查看
下面介绍实现下图所示效果的两种方式:
第一种是通过写shape布局文件来实现
给TextView设置background时引用此布局文件即可实现效果,shape布局文件代码如下:<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <!-- 虚线边框的宽度,颜色等 --> <stroke android:dashGap="3dp" android:dashWidth="6dp" android:width="1dp" android:color="#63a219" > </stroke> <!-- 矩形的圆角半径 --> <corners android:radius="10dp" /> </shape>
stroke标签下为虚线框的主要设置,dashGap表示中间隔开一段距离,即定义了样式为虚线,效果图如下:
第二种方式是通过自定义View使之继承View,然后在onDraw方法中将虚线和文字用Paint画笔画出。
主要代码如下:public class DashedSurroundTextView extends View { /** * mTextColor 文字颜色 mBorderColor 虚线边界颜色 mBorderWidth虚线边界宽度 * mTextSizen 文字大小 mText 文字内容 */ private int mTextColor; private int mBorderColor; private float mBorderWidth; private float mTextSize; private String mText; private float start_x = 0; private float start_y = 0; private float padding = 5; private float baseLineLong = 10; private float radiusX = 20; private float radiusY = 20; ... public DashedSurroundTextView(Context context, AttributeSet attrs) { super(context, attrs); //获取自定义参数 TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DashedSurroundTextView); //虚线border颜色 mBorderColor = typedArray.getColor(R.styleable.DashedSurroundTextView_border_color, Color.argb(0, 0, 0, 0)); //虚线border宽度 mBorderWidth = typedArray.getDimension(R.styleable.DashedSurroundTextView_border_width, 0); //字体颜色 mTextColor = typedArray.getColor(R.styleable.DashedSurroundTextView_textColor, Color.argb(0, 0, 0, 0)); //字体大小 mTextSize = typedArray.getDimension(R.styleable.DashedSurroundTextView_textSize, 0); //显示文字 mText = typedArray.getString(R.styleable.DashedSurroundTextView_text); } ... @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //创建文字画笔 Paint textP = new Paint(); textP.setColor(mTextColor); textP.setStyle(Paint.Style.FILL); textP.setTextSize(mTextSize); //StrokeWidth无需设置 //textP.setStrokeWidth(); //计算文字所占位置的大小 Rect bounds = new Rect(); textP.getTextBounds(mText, 0, mText.length(), bounds); canvas.drawText(mText, start_x, start_y + bounds.height() - padding, textP); //创建边界虚线画笔 Paint borderP = new Paint(); borderP.setColor(mBorderColor); borderP.setStyle(Paint.Style.FILL_AND_STROKE); borderP.setStrokeWidth(mBorderWidth); borderP.setAntiAlias(true); //画外面虚线边界 RectF oval3 = new RectF(start_x, start_y, start_x + bounds.width() + padding * 2, start_y + bounds.height() + padding * 2); PathEffect effects = new DashPathEffect(new float[]{baseLineLong, baseLineLong}, 0); borderP.setPathEffect(effects); canvas.drawRoundRect(oval3, radiusX, radiusY, borderP); } ... }
效果图如下:
虚线框的画线设置style为Paint.Style.FILL_AND_STROKE
new DashPathEffect(new float[]{baseLineLong, baseLineLong}, 0)表示画线先画长度为baseLineLong的实线,再画长度为baseLineLong的虚线,后面0是偏移量。
文字的画法较简单,计算好坐标即可。
完整示例代码地址:https://github.com/immrwk/DashedSurroundTextView
相关文章推荐
- android带有文字的图片按钮的两种实现方式
- Android 文字自动滚动(跑马灯)效果的两种实现方法
- Android 实现TextView中 文字链接的方式
- 两种方式实现的文字竖排效果
- Android两种录音方式MediaRecorder和AudioRecord实现了实时获取音量大小
- 【Android进阶学习】底部Tab的两种实现方式
- 我的Android进阶之旅------>Android之Gallery和GridView两种方式与ImageSwitcher实现带预览的和幻灯片方式的两种图片浏览器
- android 定时请求(两种实现方式)
- android 之ScrollView下套LIstview两种实现listview拓展的方式
- Android 自定义View消除锯齿实现图片旋转,添加边框及文字说明
- Android菜单实现两种方式
- android中动画实现的两种方式
- Android放大镜实现的两种方式
- 【Android UI设计与开发】第14期:顶部标题栏(五)两种方式实现仿微信标题栏弹窗效果
- (Android实战)AsyncTask和Handler两种异步方式实现原理和优缺点比较
- Android之ImageView的加边框颜色的几种实现方式
- WEB-Android两种方式实现文件上传
- android两种方式实现发送短信的功能代码
- android galary 底部Tab的两种实现方式
- Android开发教程:底部Tab的两种实现方式