`
xueyi_lee
  • 浏览: 36136 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何定制自己的View

阅读更多
关于如何定制自己的View,查了相关的文档也看了一些例子,现在把自己的理解总结一下,和大家分享。
制定自己的View,一般要继承自某一类的View,然后完成构造方法,以及对onDraw()的重写,构造方法里面涉及到一些自定义的属性,自定义的属性在res/values下新建一个attrs.xml中申明,如下所示:
arrts.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView" >
    	<attr name="text_color" format="color" />
    	<attr name="text_size" format="dimension" />
    </declare-styleable >
</resources>

在构造方法中属性的引用格式是:属性集合名_属性名,如这里要引用text_color属性,则是R.stylebale.MyView_text_color
接下来的重点就是自定义自己的View,先上代码:
package com.lee.view;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.util.AttributeSet;
import android.view.View;

public class MyView extends View {
	private Paint myPaint;//画笔
	private static final String BLOG = "http://xueyilee.iteye.com";
	
	public MyView(Context context) {
		super(context);
		myPaint = new Paint();
	}

/*
Constructor that is called when inflating a view from XML. This is called when a view is being constructed from an XML file, supplying attributes that were specified in the XML file. This version uses a default style of 0, so the only attribute values applied are those in the Context's Theme and the given AttributeSet.xml布局文件有该View时就调用此构造方法,属性会传给attrs
*/	
	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		myPaint = new Paint();
		
		//获得TypedArray接口容器,通过它可以检索自定义的属性
		TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyView);
		
		//检索属性值,第二个参数是默认值,如果没有定义则返回默认值
		int textColor = ta.getColor(R.styleable.MyView_text_color, 0xff0000);
		float textSize = ta.getDimension(R.styleable.MyView_text_size, 30);
		
		myPaint.setColor(textColor);
		myPaint.setTextSize(textSize);
		ta.recycle();//这个回收方法一定不要忘了
	}
	
	/*当View渲染它的内容的时候调用此方法*/
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		myPaint.setStyle(Style.FILL);//设置填充
		myPaint.setAntiAlias(true);//消除锯齿
		canvas.drawCircle(50, 50, 30, myPaint);
		myPaint.setColor(Color.BLUE);
		canvas.drawText(BLOG, 20, 100, myPaint);
	}


}

接下来就是布局文件了。
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
	xmlns:android="http://schemas.android.com/apk/res/android"
        
//这个命名空间部分千万不要忘了,它是自定义属性前缀
	xmlns:lee="http://schemas.android.com/apk/res/com.lee.view"

	android:orientation="vertical"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
    >

	<com.lee.view.MyView
		android:layout_width="match_parent"
		android:layout_height="wrap_content"
		lee:text_color="#00ff00"
		lee:text_size="20px"
		/>
			
</LinearLayout>

差不多就这么多了,下面是程序运行后的结果:


  • 大小: 12.6 KB
分享到:
评论

相关推荐

    tradingview官网2022年最新版

    Charting Library 是 TradingView 提供的一个开源项目,允许开发者在自己的网站上嵌入与 TradingView 相似的高质量图表。以下是一些基于这个库的重要知识点: 1. **技术指标**:Charting Library 支持上百种技术...

    HexView_hexview如何使用_hexview教程_hexviewdll_hexBIN浏览_hexview_源码.zip

    对于开发人员,理解HexView的源码能帮助你定制自己的十六进制查看器。源码中包含了文件读写、内存管理、用户界面交互等多个方面的实现,通过学习可以提升编程技能。 1. **文件读取与缓存** 源码中的文件读取模块...

    PDFView显示pdf文件

    这个工具包可能包括源代码和预编译的jar包,使得开发者可以直接将PDF查看功能整合到自己的应用中,无需依赖其他大型库,如Adobe Reader。 首先,PDFView的核心功能是加载和渲染PDF文档。在Android应用中,可以调用...

    tradingView.rar

    开发者可以利用这个库来在自己的网站上实现与TradingView类似的实时图表功能,让用户能够进行深度的技术分析。 在深入讲解知识点之前,我们需要了解几个关键概念: 1. **技术分析**:这是金融市场上的一种策略,...

    ViewServer-解决View Hierarchy不能启动

    对于源码部分,开发者可以通过阅读和理解代码来学习如何实现类似的功能,或者根据自己的需求进行定制。源码通常包含以下几个关键部分: 1. `ViewServer`服务:这是核心组件,负责接收并处理来自调试器的请求,呈现...

    PowerView插件Silverlight

    PowerView提供了一系列交互式的视图,如表格、图表、地图等,用户可以通过简单的拖放操作创建和定制。这些视图可以帮助用户发现数据中的模式、趋势和异常,从而进行更深入的数据分析。此外,PowerView还支持直接在...

    TradingView中文开发文档

    通过这些知识的介绍,用户可以深入理解TradingView Charting Library的工作原理,掌握数据绑定、图表定制、以及交易终端等关键操作,从而更有效地在自己的应用中集成和使用TradingView提供的图表工具。

    TradingView 中文开发文档

    TradingView中文开发文档是专为中国用户设计的指南,旨在帮助开发者更好地理解和利用其API,创建自定义脚本,以及集成到自己的交易系统中。 在TradingView中,用户可以: 1. **技术分析图表**:利用内置的多种...

    aview的安装包

    3. **命令行参数**:通过命令行参数,用户可以定制显示方式,例如调整缩放比例、旋转图像、翻转图像等。 4. **基本编辑功能**:虽然`aview`主要是一款查看工具,但它也提供了基本的图像操作功能,如裁剪、缩放和...

    Android绘制View(view私人定制的必修课)

    本课程“Android绘制View(view私人定制的必修课)”将深入探讨这一主题,帮助开发者掌握如何从零开始设计并实现自定义View。 首先,我们从基础开始,理解Android的View体系结构。Android的UI系统基于View和...

    HexView_V1.12.05 免安装

    6. **命令行参数**:通过命令行参数支持,用户可以定制化启动和控制HexView,例如打开特定文件、设置初始位置、执行预定义的操作等。 7. **性能优化**:考虑到“cmdline亲测支持/csr9”,该版本可能对特定硬件进行...

    TradingView中文开发文档 V1.13

    TradingView是一款金融图表服务,它提供丰富的技术指标库和直接交易功能,广泛应用于金融市场中...文档内容丰富,覆盖了从基础入门到高级定制的各个方面,是开发者使用TradingView进行金融交易系统开发的宝贵参考资料。

    让popupwindow显示在view的上方并与该view水平居中对齐

    总之,PopupWindow是Android开发中的一种强大工具,掌握其基本用法和各种定制技巧,能帮助我们创建出更美观、易用的用户界面。在实现PopupWindow的定位时,关键在于计算合适的偏移量,确保其与目标View的相对位置...

    QlikView Server Editions - v11

    - 高度定制化的安全需求。 - 对性能有较高要求的场景。 #### 二、QlikView Server Small Business Edition (SBE) **概述:** - **目标用户:**为小型部署设计,适合中小型企业使用。 - **特点:** - 只能与命名...

    ios 不规则view定制demo

    本示例“ios 不规则view定制demo”聚焦于使用Objective-C编程语言实现这样的自定义视图,而Swift开发者也可以参考其原理进行转换。在iOS应用中,自定义视图通常用于创建自定义按钮、形状、图表或其他复杂UI组件。 ...

    TradingView中文文档

    这意味着用户可以在不依赖TradingView的情况下,在自己的网站或应用中免费使用这一强大的图表工具。 - **特性**: ChartingLibrary提供了一个完全独立且自包含的解决方案,无需依赖外部服务即可运行。 - **安装步骤*...

    DebugView中文版

    它不仅简化了调试过程,提高了开发效率,还提供了丰富的定制选项,可以根据个人需求调整和过滤调试信息,对于提升软件质量及优化代码有着显著作用。通过深入理解和熟练运用DebugView,开发者能更好地驾驭复杂的编程...

    ViewUI组件库 v4.7.0.zip

    通过阅读这份文档,开发者可以了解如何将ViewUI集成到自己的项目中,以及如何使用各个组件。通常,文档会介绍如何使用npm或yarn进行安装,以及如何配置项目以引入ViewUI的CSS和JavaScript文件。 "ViewUI-4.7.0...

    QT QGraphicsview实现的简单地图

    在本文中,我们将深入探讨如何使用QT库中的QGraphicsView组件来实现一个简单的地图应用。QGraphicsView是QT框架中的一个重要部分,它提供了一个可扩展的2D图形视图,适用于构建各种图形用户界面,包括地图展示。 ...

Global site tag (gtag.js) - Google Analytics