Android:自定义View(一)

Android:从绘制一张流程图来体验View的自定义过程(一)       概述         自定义View向来不是一个轻松的话题。虽然对于android原生开发而言,这只能算是一项基本的技能,但真正当我们拿到一份需要我们自定义去实现的需求的时候,多少还会有点手足无措。具体是什么原因,我也不知道,也许,“菜,是原罪”。‘’“业精于勤,荒于嬉”,也许就是我们每一次需要的去践行这种需求的时候,内心的那一点点惰性促使我们刻意地绕过这种实践机会。久而久之,... 阅读详情

Android:自定义View(一)

自定义View:

就是继承系统的View,通过添加绘制元素,逻辑以实现自己想要实习的效果的控件。在Android开发过程中,我们想要的效果大多数情况下可以直接使用系统提供的控件来实现,
但是还是有很多效果是系统没有提供的,这时候就需要我们自己定义实现View控件或者使用第三方的自定义View控件

编写自定义View:


首先我们来实现一个简单的自定义VIew,具有View的特性,但是什么都不显示

1.首先新建一个工程——Myview
2.在MainActivity所在包下新建一个类——MyView (MyView.java)   代码如下:
<span style="font-size:14px;">package com.test.myview;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;



public class MyView extends View{

	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public MyView(Context context) {
		super(context);
	}
	
}</span>
3.把自定义View添加到布局当中 (activity_main.xml) 代码如下:
<span style="font-size:14px;"><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
   
    <com.test.myview.MyView 
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
        
</FrameLayout></span>
这样我们最简单的自定义View就完成了,运行下看看结果 如图所示:


看起来是什么都没显示,毕竟我们在MyView中什么也没有做,但是毕竟它继承了系统的View还是具有系统View的一些属性的,接下来我们来稍微改变一下看看效果,新的activity_main.xml内容:
<span style="font-size:14px;"><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
   
    <com.test.myview.MyView 
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:background="#00ff00"/>
        
</FrameLayout></span>
此时我们运行发现界面已经变成了我们设置的颜色,这说明我们自定的View还是可以使用系统View的background属性的。

4 加入绘制元素
上面那个自然不能满足我们的需要,接下来我们来加入绘制元素,绘制元素是通过View提供的一个方法——onDraw方法
<span style="font-size:14px;">	@Override
	protected void onDraw(Canvas canvas)
	{
		super.onDraw(canvas);
	}</span>
我们单击onDraw找到View.class中onDraw的定义:
 <span style="font-size:14px;">/**
     * Implement this to do your drawing.
     *
     * @param canvas the canvas on which the background will be drawn
     */
    protected void onDraw(Canvas canvas) {
    }</span>
发现其实在基类中(View中),onDraw方法中其实并没有做任何事,所以我们可以删掉super.onDraw(canvas)。我们可以在onDraw中绘制哪些东西呢?canvas中包含文字,图形,
bitmap,这些都是我们可以绘制的。我们先在onDrawe方法中绘制文字,图形,代码如下(MyView.java):

<span style="font-size:14px;">package com.test.myview;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;



public class MyView extends View{
	
	private Bitmap bitmap;

	public MyView(Context context, AttributeSet attrs) {
		super(context, attrs);
		bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
	}

	public MyView(Context context) {
		super(context);
	}
	@Override
	protected void onDraw(Canvas canvas)
	{
		//Paint类拥有颜色和类型信息关于如何绘制图形,文本,bitmaps
		Paint paint = new Paint();
		//设置文字
		paint.setTextSize(30);
		//设置颜色
		paint.setColor(0xffff0000);//默认是黑色
		//设置空心
		paint.setStyle(Style.STROKE);
		canvas.drawText("Hello View", 0, 30, paint);
		//绘制直线
		canvas.drawLine(0, 60, 100, 60, paint);
		//绘制矩形方法一
		canvas.drawRect(0, 90, 100, 190, paint);
		//绘制矩形方法二
		Rect r = new Rect(110,90,210,190);//参数是int型
		canvas.drawRect(r, paint);
		//绘制矩形方法三
		RectF rect = new RectF(0,200,100,290);//蚕食其实是float值
		canvas.drawRect(rect, paint);
		//绘制图片
		canvas.drawBitmap(bitmap, 110, 200, paint);
	}
}</span>
运行结构如下图所示:


上面是在布局中实现了我们的自定义View,那怎么在代码中实现自定义View呢?我们打开MainActivity.java,把
setContentView(R.layout.activity_main);   改为: setContentView(new MyView(this));  然后在MyView类的MyView(Context context)构造方法中实例化bitmap。
再次运行我们可以得到下图所示结果:

我们发现背景已经没有了!!这是因为我们在布局中设置了背景但是在代码中并没有设置背景颜色。

示例源码下载:
http://download.youkuaiyun.com/detail/cassiepython/9117091
android 屏幕适配一:通过自定义View的方式实现适配 实现原理: 以一个特定的宽度尺寸的设备为参考,在View加载的过程中,根据当前设备的实际像素换算出目标像素,再作用到控件上。 通常UI给我们的设计稿只有一种像素的标准,例如720 * 1280。 例如在设计稿上有一个控件宽度为屏幕尺寸的一半,即360px,假设我们真机的屏幕尺寸为1080 * 1920像素,我们再布局中设置控件尺寸也为360px,则显示为屏幕的三分之一。但是我们想要效果仍然是显... 阅读详情

相关推荐

Android自定义View开发(一):基础绘制原理

init();@Override// 绘制背景圆环// 绘制进度实现特殊的UI效果提供更好的交互体验优化性能提供可复用的组件View的工作原理Canvas的使用方法Paint的详细特性实战案例分析性能优化技巧调试方法通过本文的学习,你应该能够掌握自定义View开发的基础知识,并能够开发简单的自定义View组件。在下一篇文章中,我们将深入探讨事件分发机制。如果你对本文有任何疑问或建议,欢迎在评论区留言交流。

Ya-Jun 的博客 115

Android stuio日志工具Log.d()错误: 找不到符号 符号: 变量 Log 位置: 类 MainActivity

新手第一次使用Android的日志工具的可能会出现的报错: 其实Log已经报红了,蛮尝试下运行(快捷键shift+F10)下,就会看到报错信息,其实很简单的问题,就是忘记导包了! 添加:import android.util.Log; 当然,为了避免下次还需要手动导包,最好给Android stuio设置自动导包: 1.ctrl+alt+s快捷打开settings 2.找到 Edi...

那朵花的博客 1万+

SAP FICO 资产会计AA后台配置 (上)

输入折旧表“CZ11”如有外币计价的资产,则需指定外币计价的资产折旧范围,以及规则。因为在设置资产类型时,需指定一个对应的 资产编号范围、资产账户确定类型(便于分配自动会计科目)、屏幕格式规则(便于设置资产字段必填与否)。因为在设置资产类型时,需指定一个对应的 资产编号范围、资产账户确定类型(便于分配自动会计科目)、屏幕格式规则(便于设置资产字段必填与否)。新增资产类型:Z101 固定资产-房屋及建筑物新增资产类型:Z301 固定资产-房屋及建筑物。

ghgxm520的博客 1761

Android自定义View

找工作是个很辛苦的事情,而且一般周期都比较长,有时候既看个人技术,也看运气。第一次找工作,最后的结果虽然不尽如人意,不过收获远比offer大。接下来就是针对自己的不足,好好努力了。最后为了节约大家的时间,我把我学习所用的资料和面试遇到的问题和答案都整理成了PDF文档网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里获取一个人可以走的很快,但一群人才能走的更远!

2401_84123201的博客 461

人形机器人硬件开发:骨架系统设计全攻略

本文以人形机器人骨架系统为核心研究对象,系统解析其从理论建模到工程实现的全流程设计方法。通过融合刚体力学、材料科学与机器人控制理论,构建"概念基础-理论框架-架构设计-实现机制-实际应用-高级考量-综合拓展"的七层分析体系。重点覆盖运动学/动力学建模、轻量化结构设计、关节模块集成、多物理场耦合优化等关键技术,结合波士顿动力Atlas、本田ASIMO等经典案例,提供从原型设计到量产验证的工程实践指南。

AI天才研究院 1875

SMIC Memory配置与Library Compiler实战:从lib到db的高效转换

本文详细介绍了SMIC Memory Compiler的配置要点与使用Library Compiler将.lib文件高效转换为.db文件的完整流程。文章深入解析了关键配置参数对性能和面积的影响,并提供了从交互式操作到自动化脚本的实战指南,帮助数字芯片设计工程师顺利完成存储器模型的生成与集成,确保Design Compiler能正确调用。

weixin_28314575的博客 335

Mysql视图创建及使用

MySQL中的视图(View)是一种虚拟表,它不存储数据,而是存储一个SQL查询语句。视图可以看作是存储在数据库中的一个查询,当用户查询视图时,数据库会执行视图中定义的查询语句,并返回结果。视图可以简化复杂的查询,提高数据的安全性,以及实现数据的逻辑独立性。:通过创建视图,可以将复杂的查询语句封装起来,用户只需要查询视图即可得到所需的数据,无需每次都编写复杂的SQL语句。:通过视图可以限制用户对数据的访问。例如,可以创建一个只包含特定列的视图,这样用户只能看到这些列的数据,而看不到其他敏感信息。

Squire_Squid的博客 2431

CATIA二次开发CAA:(一)开发环境搭建

CATIA+CAA+RADE+VS2012

ysm1987的博客 1万+

Android自定义View示例(零)—很简单的自定义View

MainActivity如下: package cc.testcompounddrawables; import android.app.Activity; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.widget.TextView; /** * Demo描述: *

谷哥的小弟 2799

局域网tcp通信实验

IPv4 地址 . . . . . . . . . . . . : 192.168.92.79。IPv4 地址 . . . . . . . . . . . . : 192.168.92.59。子网掩码 . . . . . . . . . . . . : 255.255.255.0。子网掩码 . . . . . . . . . . . . : 255.255.255.0。使用这篇文章的小工具。

weixin_51883798的博客 433

用 SAML 2.0 Bearer Assertion 配置 ABAP OAuth 2.0 令牌交换

摘要: SAP系统集成中,身份跨系统传递是关键挑战。OAuth 2.0的SAML 2.0 Bearer Assertion grant机制通过SAML断言换取访问令牌,实现安全身份传递。配置核心在ABAP的SOAUTH2事务码,需绑定可信SAML身份提供商(IdP)并指定访问范围。实际应用中,需确保SSL加密传输,正确配置SAML IdP信任关系,并为OAuth客户端分配专用系统用户。常见问题包括证书不匹配、权限配置不当等,需分层控制权限边界以保障安全。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 835

Android Activity/View/Window/Dialog/Fragment 深层次关联(白话解析)

前言 很早就想就这几个UI 组件关系梳理一篇博客,但由于之前一些基础博客没梳理好,因此耽搁了。这些UI 组件不论对于初学者还是有一定开发经验的同学来说都是经常用到的,但是可能没有深究其中差异,而网上也没有统一梳理这方面知识的文章。 本篇文章尝试用简单的语言精确描述个中关联与差异,通过本篇文章你将了解到: 1、Window 与 Window.java/PhoneWindow.java 有啥关系? 2、Window 与 View 是如何关联上的? 3、View 与 ViewGroup 父与子嵌套交错? 4、A

3838

Visual Studio Code + MCP Server + Claude Code 三件套进行 ABAP 开发

本文介绍了如何在Visual Studio Code中利用Claude Code和SAP官方提供的MCP Server进行ABAP开发。作者分享了19年ABAP开发经验,从手动编码到如今通过自然语言生成高质量代码的技术演进。详细说明了配置步骤:启用ADT MCP Server、安装Claude Code扩展、配置.claude.json文件,并验证MCP Server的14个功能。通过实例演示了如何用自然语言指令让Claude Code创建包含冒泡排序实现和单元测试的ABAP类,展示了MCP Server在

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1296

Android 自定义View(一):View是什么?如何创建自定义view,自定义属性等

当android内置view无法满足我们的时候,我们需要自定义View。那么我们应该如何自定义?如何绘制呢?接下来,我们会通过一个案例进行讲解。class MyEditText @JvmOverloads constructor(//第一步:继承EditText= nullinit {//直接设置显示出来x。) {//第二步:当文字发生改变的时候,则调用这个方法,进行图标的显示//第四步:触摸的时候,并且坐标是在图标上面,才进行文字的删除。event?

前期后期 2822

YOLO11涨点优化:原创自研 | 魔改Bottleneck,具备多尺度和特征通道融合的结构

可以将C3k2_MSAMCS放在neck,或者backbone和neck同时修改,具体看自己数据集的涨点情况决定

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1649

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

重学Android:自定义View基础(一)

作为一名安卓开发,也被称为大前端,做一个美观的界面,是我们必备的基础技能,可能在开发中我们最常用的是系统自带的View,因为他能满足绝大部分需求,难一点的我们也可以上Github上找个三方库使用,少数情况下会让我们进行自定义View,当然这不代表着我们可以不去掌握其原理,因为它是通往中高级程序员的必经之路,也是大厂面试的热门知识,只有熟练掌握其核心原理,才能让我们在后续的开发中游刃有余。

WriteBug001的博客 1292

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

浅谈安卓自定义view(一):制作一个最最最简单的自定义view

对于安卓程序员来说,自定义view简直不要太重要,毕竟有很多功能,譬如圆形头像这些,用单纯的原生非常难以实现,而用自定义view,简直分分钟。在这里,我尝试用最简单方式跟初学者说一下如何自定义一个自己的view~首先,最简单最简单的自定义view,有多简单?简单到没有逻辑,没有任何自带属性,只是简单展示,譬如,我制作一个圆形图片。。。一共只需要两步,第一步,创建你的自定义类,让它继承View类,并重

wsyizmao的博客 1万+

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Android学习总结 :自定义 View(一)

在 Android 中,一个设计精良的自定义 View 就像其他设计精良的类一样,它封装了一些特殊的功能并且有一个方便使用的界面。真正设计好的自定义 View ,可以更有效地利用 CPU 和内存的资源。

nijun914的博客 542

Android的View体系与自定义View系列一:(Kotlin版)

关于Android的View你需要知道的基础知识

weixin_44755408的博客 2928

android自定义view凯,Android Study之自定义View进阶路:掌握绘制基本图形(一)

原标题:Android Study之自定义View进阶路:掌握绘制基本图形(一)LZ-Says:我觉得人与人相处,首先排在首位的是诚信,其次才是一些其他的东西。而关于技术,交流才是成长的路,闭门造车永远看不到外面的精彩,领悟不到自身新高度。So,诚信待人,多交流,多沟通,一起成长~!前言开发过程以及平时使用过程中,总是能看到炫之又炫的效果,以前一直都是展首相望,一直都不敢触碰,But,今天,我们从...

weixin_39924674的博客 299

Android自定义View工具:Paint&Canvas(一)

安卓的graphics提供了2D图形各种绘制工具,如Canvas(画布), color filters(颜色过滤器), points(点), rectangles(矩形)等,利用这些工具可以直接在界面上进行绘制。 本文主要讲的是自定义View时我们经常用到的Canvas和Paint,像平时画画一样,我们需要画布和画笔,而Canvas就是画布,Paint就是画笔. Canvas官网地址: https://developer.android.com/reference/android/graphics/Canv

小马快跑的博客 717

Android -- 每日一问:如何实现自定义View?

每日一问:如何实现自定义View?

Kevin Learn Android 1982

Android自定义View你所要知道的(一):坐标系

准备写自定义View这个专栏的文章,从最基础的坐标系到Demo。本着巩固自身知识的意愿,不足之处还请大家多多包涵。 之所以要先掌握Android的坐标系,因为view是靠坐标来确定它在屏幕当中的位置。了解Android的坐标系后,将会对的View的布局有一定的概念感。 首先Android中以屏幕的左上角为原点坐标(0,0); 需要值得注意的是,以原点为中心。Y轴向下为正,向上则为负。X轴

楊杰的博客 4501

[Android]自定义View学习(一):写一个TextView

一.基础知识: 在进入自定义View的学习前,先了解相关的知识点才能更好帮助我们去理解和掌握。自定义View可以通过不同的实现方法进行分类,有继承View的,也有继承ViewGroup的。常见控件如:Textview也属于自定义View的范畴,在后面我们会去动手实现一个TextView。 开始学习前,我们先从继承View的实现方法入手,View的绘制流程包括了以下三部分: onMeasure:测量。包括三种模式:unSpecified,exactly,at_most。具体不同在后面再详细分析 onD

阿Ciu 511

android以view建坐标系,[Android]自定义View(一):坐标系

Android中view的绘制和动画效果的制作是常见的两大难点,前段时间正好在优化项目的时候做了一些动画。现在对于它们进行个归纳总结,如果有其他看法的同学欢迎给我留言,或者微博私信我~~以敝人粗浅的理解,Android中交互是通过手势触摸屏幕中的view而产生的一系列动作,那么在view过程中我们可以理解为在一个数学坐标系上去判断触碰点击的位置和view点关系;动画我们可以理解为让view在坐标系...

weixin_36059283的博客 326
上一篇: 编译原理:第五节
下一篇: 编译原理:第六节
cassiePython
博客等级 码龄12年 303粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值