热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自定义控件继承法

在布局文件中使用自定义的控件→声明自定义的命名空间:



在布局文件中使用自定义的控件 

→ 声明自定义的命名空间:
    

    xmlns:mobile="http://com.kitty.widget"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >
     
 

→ 在布局中使用自定义的控件,传入控件属性:
       

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="第一个图标"

        mobile:iconSrc="@drawable/android" />


代码自定义控件
→ 令控件继承自现有控件:
    public class IconTextView extends TextView {...}

→ 定义命名空间:
    private final String namespace = "http://com.kitty.widget ";

→ 从布局文件读取控件属性:
    private int resourceId = 0;

private Bitmap bitmap;

 

public IconTextView(Context context, AttributeSet attrs) {

super(context, attrs);

 

resourceId = attrs.getAttributeResourceValue(namespace, "iconSrc", 0);

if (resourceId > 0) {

bitmap = BitmapFactory.decodeResource(getResources(), resourceId);

}

}

→  根据读入的属性绘制控件:
    @Override

protected void onDraw(Canvas canvas) {

if (bitmap != null) {

 

Rect src = new Rect();// 从原图上截取图像的区域

Rect target = new Rect();// 将截取的图像复制到的目标区域

 

src.left = 0;

src.top = 0;

src.right = bitmap.getWidth();

src.bottom = bitmap.getHeight();

 

int textHeight = (int) getTextSize();

target.left = 0;

target.top = (int) ((getMeasuredHeight() - getTextSize()) / 2) + 1;

target.bottom = target.top + textHeight;

target.right = (int) (textHeight * (bitmap.getWidth() / (float) bitmap.getHeight()));

// 开始绘制图像

canvas.drawBitmap(bitmap, src, target, getPaint());

// 将TextView中的文本向右移动一定的距离(在本例中移动了图像宽度加2个象素点的位置)

canvas.translate(target.right + 2, 0);

}

super.onDraw(canvas);



效果图:
 

     


推荐阅读
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文介绍如何使用布局文件在Android应用中排列多行TextView和Button,使其占据屏幕的特定比例,并提供示例代码以帮助理解和实现。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • ListView简单使用
    先上效果:主要实现了Listview的绑定和点击事件。项目资源结构如下:先创建一个动物类,用来装载数据:Animal类如下:packagecom.example.simplelis ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • Android LED 数字字体的应用与实现
    本文介绍了一种适用于 Android 应用的 LED 数字字体(digital font),并详细描述了其在 UI 设计中的应用场景及其实现方法。这种字体常用于视频、广告倒计时等场景,能够增强视觉效果。 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入解析 Android IPC 中的 Messenger 机制
    本文详细介绍了 Android 中基于消息传递的进程间通信(IPC)机制——Messenger。通过实例和源码分析,帮助开发者更好地理解和使用这一高效的通信工具。 ... [详细]
author-avatar
手机用户2502919951
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有