热门标签 | 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应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 2021年最详细的Android屏幕适配方案汇总
    1Android屏幕适配的度量单位和相关概念建议在阅读本文章之前,可以先阅读快乐李同学写的文章《Android屏幕适配的度量单位和相关概念》,这篇文章 ... [详细]
  • 在最近的一系列文章,对midipadAPP,有一个关于一个radialgradiant渲染每个padview利用的探讨,对审美的原因&#x ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在开发app时,使用了butterknife后,在androidStudio打包apk时可能会遇到报错。为了解决这个问题,可以通过打开proguard-rules.pro文件进行代码混淆来解决。本文介绍了具体的混淆代码和方法。 ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • 开发笔记:(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了(002)spring容器中bean初始化销毁时执行的方法及其3种实现方式相关的知识,希望对你有一定的参考价值。 ... [详细]
  • fileuploadJS@sectionscripts{<scriptsrc~Contentjsfileuploadvendorjquery.ui.widget.js ... [详细]
  • 注:根据Qt小神童的视频教程改编概论:利用最新的Qt5.1.1在windows下开发的一个小的时钟程序,有指针与表盘。1.Qtforwindows开发环境最新的Qt已经集 ... [详细]
  • java unhandled,Eclipse编辑java文件报Unhandled event loop exception错误的解
    本人Eclipse版本是”eclipse-jee-kepler-SR2-win32-x86_64“昨天因为换电脑,所以重装了一下软件,装好eclipse ... [详细]
  • 四、连接屏幕流各位读者好!我们已经到了应用开发的一个重要阶段——连接屏幕。如您所知,我们在上一章 ... [详细]
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社区 版权所有