自定义一般分三种情况

1. 自定义布局

2. 自定义控件

3.直接继承View

下面来着eoe例子,实现自定义控件

1. 自定义属性

res/values/attrs.xml 自定义属性

<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="progress"><attr name="text" format="string" /><attr name="textSize" format="dimension" /></declare-styleable>
</resources>

2. 自定义控件,实现带有 AttributeSet的构造方法

package com.test.uidemo;import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;import com.test.uidemo.R;/*** 参考eoe书籍* 自定义控件* 实现用一个边框把文字包裹.*/
public class MyTextView extends TextView {public MyTextView(Context context) {super(context);}public MyTextView(Context context, AttributeSet attrs) {super(context, attrs);TypedArray attr = context.obtainStyledAttributes(attrs, R.styleable.progress);setText(attr.getString(R.styleable.progress_text));setTextSize(attr.getDimension(R.styleable.progress_textSize, 16));Log.i("Text", attr.getString(R.styleable.progress_text));}protected void onDraw(Canvas canvas){super.onDraw(canvas);Paint paint = new Paint();paint.setColor(android.graphics.Color.RED);canvas.drawLine(0,0,this.getWidth()-1,0,paint);canvas.drawLine(0,0,0,this.getHeight()-1,paint);canvas.drawLine(this.getWidth()-1,0,this.getWidth()-1,this.getHeight()-1,paint);canvas.drawLine(0,this.getHeight()-1,this.getWidth()-1,this.getHeight()-1,paint);}}

3. 使用自定义控件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:progress="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.test.uidemo.MainActivity"><com.test.uidemo.MyTextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"progress:text="自定义"progress:textSize="30dp"android:layout_centerVertical="true"android:layout_alignParentRight="true"android:layout_alignParentEnd="true"></com.test.uidemo.MyTextView></RelativeLayout>

View Code

转载于:https://www.cnblogs.com/newlangwen/p/5357763.html

android 自定义控件相关推荐

  1. Android自定义控件NumberCircleProgressBar(圆形进度条)的实现

    Android自定义控件NumberCircleProgressBar(圆形进度条)的实现

  2. android自定义view获取控件,android 自定义控件View在Activity中使用findByViewId得到结果为null...

    转载:http://blog.csdn.net/xiabing082/article/details/48781489 1.  大家常常自定义view,,然后在xml 中添加该view 组件..如果在 ...

  3. android里的editText怎么用,Android自定义控件EditText使用详解

    本文实例为大家分享了Android自定义控件EditText的具体代码,供大家参考,具体内容如下 自定义控件分三种: 1. 自绘控件 2. 组合控件 3. 继承控件 代码已上传到 github 以后的 ...

  4. android汽车之家顶部滑动菜单,Android自定义控件之仿汽车之家下拉刷新

    关于下拉刷新的实现原理我在上篇文章Android自定义控件之仿美团下拉刷新中已经详细介绍过了,这篇文章主要介绍表盘的动画实现原理 汽车之家的下拉刷新分为三个状态: 第一个状态为下拉刷新状态(pull ...

  5. Android 自定义控件打造史上最简单的侧滑菜单

    侧滑菜单在很多应用中都会见到,最近QQ5.0侧滑还玩了点花样~~对于侧滑菜单,一般大家都会自定义ViewGroup,然后隐藏菜单栏,当手指滑动时,通过Scroller或者不断的改变leftMargin ...

  6. Android绘制自定义控件,Android自定义控件绘制基本图形基础入门

    本文讲述绘制android自定义各种图形效果,为自定义控件的入门篇 相关视频链接: android自定义控件系列 android视频全系列 绘制点–这个控件只需要在布局中引用或者代码中new 即可,下 ...

  7. Android自定义控件之仿汽车之家下拉刷新

    感谢 阿拉灯神灯 的技术分享 .版权声明:原文来自http://blog.csdn.net/nugongahou110 关于下拉刷新的实现原理我在上篇文章Android自定义控件之仿美团下拉刷新中已经 ...

  8. Android自定义控件之自定义时钟

    Android自定义控件之自定义时钟 这个是我从别的开源项目中挖出来的,真心写的很不错,然后继续下来以便不时之需,直接上代码: WatcherBoard.java这个是自定义的时钟类 package ...

  9. 自定义控件android特效,Android自定义控件eBook实现翻书效果实例详解

    本文实例讲述了Android自定义控件eBook实现翻书效果的方法.分享给大家供大家参考,具体如下: 效果图: Book.java文件: package com.book; import androi ...

  10. Android.自定义控件的实现 (转载)

    尊重他人劳动成果,转载请注明出处. 转自:http://kandy0619.blog.163.com/blog/static/64344345201012325939280/ 可能是一直都在做Web的 ...

最新文章

  1. Python--matplotlib 绘图可视化练手--折线图/条形图
  2. 计算机网络和通讯原理图,第章 计算机网络通信原理.ppt
  3. 基础编程题目集 7-2 然后是几点 (15 分)
  4. 错过血亏!深入学习Redis集群搭建方案及实现原理
  5. Windows监听进程是否退出C++
  6. HTML用ONMOUSEOVER,ONMOUSEOUT改变背景色或背景图片的方法
  7. [JS] 001_JavaScript基础增强
  8. HDU 1034 - Candy Sharing Game
  9. feathers ui 实现机制深入解析(feathers ui 源码解析-原创)
  10. 使用ES6的Promis完美解决ajax的回调(优化代码)
  11. Spring Cloud 应用篇 之 Spring Cloud Stream(消息驱动)
  12. Win11预览版怎么更新正式版?
  13. 计算机文件夹加密码怎么设置,如何为文件夹设置密码,教您如何设置
  14. 整车行业 SAP APO 开发备忘(刘欣)
  15. vue单页面怎么做SEO优化
  16. 【解决】InsecureRequestWarning: Unverified HTTPS request is being made to host ‘www.dytt89.com‘.
  17. 经济观察报:豆瓣的创业故事
  18. 门控时钟电路(Intergrated clock gating)
  19. 如何制作注册登录网址
  20. 关于oem7grub 0.4.4 2009-11-18,memory:639k/30 的问题的解决

热门文章

  1. 【caffe-matlab】目标检测R-FCN算法于Windows下配置
  2. [Pytorch]Pytorch的tensor变量类型转换
  3. 网上书店 买方数据库
  4. Linux内核分析06
  5. Android之网络编程利用PHP操作MySql插入数据(四)
  6. 前端优化-vue-cli4安装webpack-bundle-analyzer分析包文件
  7. .NET Framework 2.0 组件和非托管代码与交互操作详解(转)
  8. MySql(18)——Linux MySQL主从配置
  9. SQL 字符串分割表函数
  10. jmap在ubuntu上DebuggerException: Can't attach to the process