自定义控件 带描边的TextView
使用
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_stroke_textview);//在布局中使用((StrokeTextView) findViewById(R.id.tv1)).append("\n支持append,支持图文混排");((StrokeTextView) findViewById(R.id.tv2)).setStrokeColorAndWidth(0xff0000ff, 3f);//在代码中使用LinearLayout ll_root = (LinearLayout) findViewById(R.id.ll_root);//默认StrokeTextView strokeTextView3 = new StrokeTextView(this);strokeTextView3.setText("支持在代码中创建");strokeTextView3.setBackgroundColor(0x3f0000ff);strokeTextView3.setGravity(Gravity.CENTER);ll_root.addView(strokeTextView3);//默认是(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)//设置setPadding、setMarginsStrokeTextView strokeTextView4 = new StrokeTextView(this);strokeTextView4.setText("设置Padding、Margins");strokeTextView4.setTextColor(0xff00ff00);strokeTextView4.setTextSize(20);strokeTextView4.setStrokeColorAndWidth(0xffff0000, 2.5f);strokeTextView4.setBackgroundColor(0x30ff00ff);strokeTextView4.setPadding(30, 0, 60, 0);LinearLayout.LayoutParams mLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);mLayoutParams.setMargins(30, 0, 0, 0);strokeTextView4.setLayoutParams(mLayoutParams);ll_root.addView(strokeTextView4);}}<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/ll_root"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#2000"android:orientation="vertical"android:padding="5dp" ><com.bqt.myview.StrokeTextViewandroid:id="@+id/tv1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:drawableRight="@drawable/ic_launcher"android:text="带描边的TextView"android:textColor="#fff"android:textSize="18sp" /><com.bqt.myview.StrokeTextViewandroid:id="@+id/tv2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="5dp"android:gravity="right"android:paddingRight="10dp"android:text="支持设置padding,margin,textSize,宽高、textColor,背景,gravity,及sp,dp,px单位"android:textColor="#0f0"android:textSize="30px" /></LinearLayout>
View
/** 给文字加描边,实现方法是两个TextView叠加,只有描边的TextView放在底部,实体TextView叠加在上面* 当此控件被创建的同时创建另一个TextView,并将此TextView设为STROKE样式* 在测量onMeasure、绘制onDraw、布局onLayout自身时,使用同样的参数同样的方式处理此STROKE样式的TextView*/public class StrokeTextView extends TextView {/**描边的TextView*/private TextView strokeTextView = null;/**描边的TextView的颜色*/private int strokeColor = 0xffff0000;/**描边的TextView的宽度*/private float strokeWidth = 1.5f;/*** 设置描边的颜色和宽度*/public void setStrokeColorAndWidth(int strokeColor, float strokeWidth) {this.strokeColor = strokeColor;this.strokeWidth = strokeWidth;init();//必须重新调用初始化方法}public StrokeTextView(Context context) {this(context, null);}public StrokeTextView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public StrokeTextView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);strokeTextView = new TextView(context, attrs, defStyle);init();}public void init() {TextPaint textPaint = strokeTextView.getPaint();textPaint.setStrokeWidth(strokeWidth); //设置描边宽度strokeTextView.setTextColor(strokeColor); //设置描边颜色textPaint.setStyle(Style.STROKE); //对文字只描边invalidate();}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);strokeTextView.setText(getText());strokeTextView.setGravity(getGravity());strokeTextView.measure(widthMeasureSpec, heightMeasureSpec);}@Override//卧槽,必须把super放在后面protected void onDraw(Canvas canvas) {strokeTextView.draw(canvas);super.onDraw(canvas);}@Overrideprotected void onLayout(boolean changed, int left, int top, int right, int bottom) {super.onLayout(changed, left, top, right, bottom);strokeTextView.layout(left, top, right, bottom);}@Overridepublic void setLayoutParams(ViewGroup.LayoutParams params) {super.setLayoutParams(params);strokeTextView.setLayoutParams(params);}@Overridepublic void setBackgroundResource(int resid) {super.setBackgroundResource(resid);strokeTextView.setBackgroundResource(resid);}@Overridepublic void setTextSize(float size) {super.setTextSize(size);strokeTextView.setTextSize(size);}@Overridepublic void setTextSize(int unit, float size) {super.setTextSize(unit, size);strokeTextView.setTextSize(unit, size);}@Overridepublic void setPadding(int left, int top, int right, int bottom) {super.setPadding(left, top, right, bottom);strokeTextView.setPadding(left, top, right, bottom);}}
自定义控件 带描边的TextView的更多相关文章
- Android自定义控件 -- 带边框的TextView
使用xml实现边框 原来使用带边框的TextView时一般都是用XML定义来完成,在drawable目录中定义如下所示的xml文件: <?xml version="1.0" ...
- 李洪强iOS开发之带placeHolder的Textview
李洪强iOS开发之带placeHolder的Textview 01 - 创建工过程,定义全局属性,遵守textview的代理协议 02 - 添加一个textview和一个label 03 - 实现 ...
- Android 手机卫士--自定义控件(获取焦点的TextView)
本文地址:http://www.cnblogs.com/wuyudong/p/5906735.html,转载请注明源地址. 本文将实现标题栏下面的textview中的文字跑马灯的效果,就是将一行文字水 ...
- 新浪微博客户端(36)-自定义带placeholder的TextView
iOS 上自带的UITextView竟然不能设置placeholder,但是UITextView却可以,我也真是醉了.没办法了,自己写一个 DJTextView.h #import <UIKit ...
- android自定义控件实例(Linearlayout组合TextView和ImageView)
2013-12-18 11:25:22 转载自: http://www.open-open.com/lib/view/open1328836804515.html 很多时候android常用的控件不能 ...
- Android 如何实现带滚动条的TextView,在更新文字时自动滚动到最后一行?
1.在布局文件中放置一个TextView,给它添加scrollbars和fadeScrollbars两个属性. 如下设置:滚动条为垂直滚动条,并且一直可见(当TextView中的文字行数超过页面能显示 ...
- android 自定义组件-带图片的textView
1. 定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <decla ...
- 学习下关于ViewStub实例的用法及带Drawable的TextView的妙用
在项目中,我们可能有多种数据来源比如: 里面有ListView也有当获得数据为空的时候显示的空信息.根据点击的项目还是差事不同,显示的空消息也不同.a.没有收藏的项目,b目前没有收藏的差事. 其实实现 ...
- 跑马灯带你深入浅出TextView的源码世界
一.背景 想必大家平时也没那么多时间是单独看源码,又或者只是单纯的看源码遇到问题还是不知道怎么从源码的角度解决. 但是大家平时开发过程中肯定会遇到这样或那样的小问题,通过百度.Google搜索都无果, ...
随机推荐
- 过滤器(filter)实现
花了2天时间,实现了过滤器功能,针对数据进行筛选,包含以下7个过滤器: 'date','currency','number','tolowercase','touppercase','orderBy' ...
- 洛谷 P1515 旅行
P1515 旅行 题目描述 你要进行一个行程为7000KM的旅行,现在沿途有些汽车旅馆,为了安全起见,每天晚上都不开车,住在汽车旅馆,你手里现在已经有一个旅馆列表,用离起点的距离来标识,如下: 0, ...
- winform中相对路径和绝对路径的获取
例如: Path.GetFullPath(Path.Combin(@"C:\a\b\c","..\b.text")); ..代表上级目录 .代表当前目录 结果: ...
- Poweroff – 很好很强大的定制关机工具
Poweroff – 很好很强大的定制关机工具 Poweroff 是一个用来管理电脑关机系统的小工具,支持定时,支持远程 作者开放源代码,有兴趣的同学可以尝试着制作一下汉化版本. 可以设定不同时间 ...
- Delphi XE5 附破解补丁
Embarcadero RAD Studio XE5 Version 19.0.13476.4176: http://altd.embarcadero.com/download/radstudio/x ...
- CLR via C#字符串和文本处理
一.字符 在.NET Framewole中,字符总是表示成16位Unicode代码值,这简化了国际化应用程序的开发. 每个字符都表示成System.Char结构(一个值类型) 的一个实例.Sy ...
- 剑指offer之关于整数的处理
首先是整数次方的处理 在这处理的时候有几个细节主义处理 1.当指数是负数的时候 2.当指数式0的时候 3.当不满足条件的时候要抛出异常 再一个就是常用的将一个树化为二进制的形式,或者是求整数的幂或者矩 ...
- Web Server PROPFIND Method internal IP Discosure
Title:Web Server PROPFIND Method internal IP Discosure --2012-11-09 09:47 Nessus扫描出来一个安全缺陷,Web Serv ...
- 使用john破解ubuntu(linux)9.10密码
Title:使用john破解ubuntu(linux)9.10密码 --2011-11-23 15:00 ubuntu 9.10的账户密码加密方式改用sha512了,默认的john是破不了的,还好官方 ...
- 优秀的VeriSign和混蛋的GlobalSign
由于领导不懂行,直接购买了GlobalSign的证书,结果引起了我这个开发人员痛苦的2星期之旅,说说大体情况: 目的:对买来的一个驱动程序进行签名,使之能够在Win x64情况下安装和使用 下载Win ...
