自定义控件 带描边的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搜索都无果, ...
随机推荐
- RTSP协议资料
维基百科: RTSP:http://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol RTP:http://en.wikipedia.org/wik ...
- Visual Studio使用技巧记录
1.关闭调试,iis express仍显示在托盘中: 工具 ---> 选项 ---> 调试 ---> 编辑并继续,取消选择“编辑并继续”的选择框 2.关闭浏览器一直请求: 在调试旁边 ...
- 史上最全的css hack
<!DOCTYPE html> <html> <head> <title>Css Hack</title> <style> #t ...
- Canvas -画图 关键字
颜色.样式和阴影 属性 描述 fillStyle 设置或返回用于填充绘画的颜色.渐变或模式 strokeStyle 设置或返回用于笔触的颜色.渐变或模式 shadowColor 设置或返回用于阴影的颜 ...
- jquery判断滚动条到底
$(document).scroll(function(){ var dHeight = $(document).height(); var wHeight = $(window).height(); ...
- DEIVER_OBJECT结构参数
typedef struct { PDEVICE_OBJECT DeviceObject; //指向驱动程序创建的设备对象 PUNICODE_STRING HardwareDatabase; //记录 ...
- ASP.NET MVC学习之路:模板页
1.MVC开发步骤: 控制器-视图. 2.每一个视图都会有一个默认的模板页:_ViewStart.cshtml. 名字不能改,只能叫_ViewStart. 3.Layout=”~/Views/Shar ...
- 在iOS开发中使用FMDB-备用
SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.iOS SDK很早就支持了SQLite,在使用时,只需要加入 libsqlite3.dyli ...
- 转:浅析基于微软SQL Server 2012 Parallel Data Warehouse的大数据解决方案
综述 随着越来越多的组织的数据从GB.TB级迈向PB级,标志着整个社会的信息化水平正在迈入新的时代 – 大数据时代.对海量数据的处理.分析能力,日益成为组织在这个时代决胜未来的关键因素,而基于大数据的 ...
- ural 1348 Goat in the Garden 2
http://acm.timus.ru/problem.aspx?space=1&num=1348 #include <cstdio> #include <cstring&g ...
