自定义TextView实现艺术体
来源:互联网 发布:激光笔软件 编辑:程序博客网 时间:2024/06/05 23:39
今天自定义TextView实现艺术字体,开始将attrs文件创建起,将所有的数据类型写好,再Xml文件引用即可,但在添加字体文件时遇到些问题,它和Eclipse中创建assets文件位置不样,要在src/main/创建。
而且创建好了还是不能用,哎,真烦,太麻烦了,到处找资源,终于皇天不负有心人啊,最中找到了,要在XXX.Iml文件中去配置
好,需要配置的我们已经差不多完了,下面我们进行实战演练。
首先要在values文件夹创建attrs文件,
<?xml version="1.0" encoding="utf-8"?><resources> <!--定义控件名称所对应的数据类型--> <attr name="titleText" format="string" /> <attr name="titleTextColor" format="color" /> <attr name="titleTextSize" format="dimension" /> <!--定义控件名称,和所包含的具体类型名称--> <declare-styleable name="MyTextView"> <attr name="titleText" /> <attr name="titleTextColor" /> <attr name="titleTextSize" /> </declare-styleable></resources>在次我们开始写代码,
public class MyTextView extends View { /** * 文本 */ private String titleText; /** * 文本的颜色 */ private int titleTextColor; /** * 文本大小 */ private int titleTextSize; /** * 绘制时控制文本绘制的范围 */ private Rect bound; /** * 设置画笔 */ private Paint paint; Typeface typeFace; public MyTextView(Context context) { super(context); } public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); /** * 获取我们所自定义样式的属性 * */ TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyTextView); //在assets文件夹中获取到fonts/CC.ttf字体文件 typeFace = Typeface.createFromAsset(context.getAssets(), "fonts/CC.ttf"); int count = typedArray.getIndexCount(); for (int i = 0; i < count; i++) { int attr = typedArray.getIndex(i); switch (attr) { case R.styleable.MyTextView_titleText: titleText = typedArray.getString(attr); break; case R.styleable.MyTextView_titleTextColor: //设置默认颜色为黑色 titleTextColor = typedArray.getColor(attr, Color.GREEN); break; case R.styleable.MyTextView_titleTextSize: //默认设置为16sp,TypeValue也可以把sp转化为Px titleTextSize = typedArray.getDimensionPixelSize(attr, (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 16, getResources().getDisplayMetrics())); break; } } //回收内存 typedArray.recycle(); /** * 获得绘制文本的宽和高 */ paint = new Paint(); paint.setTextSize(titleTextSize); bound = new Rect(); paint.getTextBounds(titleText, 0, titleText.length(), bound); } public MyTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { //MeasureSpec的specMode,一共三类型。 //EXACTLY:一般是设置了明确的值或者是MATCH_PARENT。 //AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT。 //UNSPECIFIED:表示子布局想要多大就多大,这个很少用. int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heigthMode = MeasureSpec.getMode(heightMeasureSpec); int heigthSize = MeasureSpec.getSize(heightMeasureSpec); int width; int height; if (widthMode == MeasureSpec.EXACTLY) { width = widthSize; } else { paint.setTextSize(titleTextSize); //将字体设置在矩形中 paint.getTextBounds(titleText, 0, titleText.length(), bound); //得到矩形高度 float textwidth = bound.width(); int desired = (int) (getPaddingLeft() + textwidth + getPaddingRight()); width = desired; } if (heigthMode == MeasureSpec.EXACTLY) { height = heigthSize; } else { paint.setTextSize(titleTextSize); paint.getTextBounds(titleText, 0, titleText.length(), bound); float textHeigth = bound.height(); int desird = (int) (getPaddingTop() + textHeigth + getPaddingBottom()); height = desird; } //将计算出来的大小来保存到设置,系统会获取到值在进行画控件。 setMeasuredDimension(width, height); } @Override protected void onDraw(Canvas canvas) { paint.setColor(Color.GREEN); canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint); paint.setColor(titleTextColor); //设置字体 paint.setTypeface(typeFace); canvas.drawText(titleText, getWidth() / 2 - bound.width() / 2, getHeight() / 2 + bound.height() / 2, paint); }}
好了,我们应该在布局文件中将attrs文件引入
在布局文件中使用此控件,
<com.tesedome.view.MyTextView android:layout_width="wrap_content" android:layout_height="wrap_content" app:titleText="我是一朵花。" app:titleTextColor="#ffffa272" app:titleTextSize="50sp" />好啦,我们费了这么大的功夫终于可以看我们实现的效果啦。
0 0
- 自定义TextView实现艺术体
- textview的自定义实现
- 垂直滚动textview自定义实现
- android自定义view 实现TextView 中文粗体
- 自定义View 实现 TextView 的功能:
- 自定义TextView实现跑马灯效果
- 自定义TextView实现跑马灯效果
- Android TextView自定义实现@用户跳转
- 自定义TextView实现首行缩进
- Android TextView自定义实现@用户跳转
- Android自定义TextView实现跑马灯功能
- 自定义TextView实现效果图字体适配
- 自定义textview控件实现文字滚动效果
- 自定义TextView实现验证码功能
- 自定义View实现TextView中的DrawableLeft缺陷
- 安卓自定义TextView实现签到效果
- android TextView 实现自定义文字点击效果
- Android 自定义TextView 实现文本间距
- qml学习----------Flow(流式布局)
- mount.cifs
- 副本集指南(一)
- java io
- web_servlet
- 自定义TextView实现艺术体
- Vim常用命令
- 数据加密的基本使用
- GCC编译器(2)
- JavaScript闭包运行机制
- android判断当前网络状态
- Android 通知栏
- javamail 收发邮件
- java数组之间赋值问题