android学习笔记(二)

1、自定义View。

package com.example.view;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
//可以在View测量和布局完成后获取屏幕的宽度和高度。
//重写 onSizeChanged() 方法实现这一点。
//这个方法在View的尺寸发生变化时被调用,其中包括 View 第一次测量和每次布局发生变化时。
public class CustomView1 extends View {private Paint paint;private int screenWidth, screenHeight;public CustomView1(Context context) {super(context);init();}public CustomView1(Context context, AttributeSet attrs) {super(context, attrs);init();}private void init() {paint = new Paint();paint.setColor(Color.RED);paint.setStyle(Paint.Style.FILL);}
//onSizeChanged()方法获取屏幕的宽度和高度,并在 onDraw()方法中使用这些值绘制一个圆。@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);screenWidth = w;screenHeight = h;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (screenWidth > 0 && screenHeight > 0) {canvas.drawCircle(screenWidth / 2f, screenHeight / 2f, Math.min(screenWidth, screenHeight) / 2f, paint);}}
}

2、创建activity_main.xml文件,在xml中使用自定义View。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><!--使用 `<com.example.view.CustomView>` 标签引入自定义的 View,并设置它的宽度、高度和布局参数。--><com.example.view.CustomView1android:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerInParent="true" /></RelativeLayout>

3、在MainActivity中,使用自定义View。

package com.example.view;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.example.listview.R;
//AppCompatActivity是 Android Support 库提供的一个类,
//它使得应用程序可以在旧版本的 Android 上运行时,使用新版的 API。
public class MainActivity extends AppCompatActivity {
//`onCreate()` 方法是一个生命周期方法,在活动被创建时调用。
// 在这个方法中,首先调用了父类的 `onCreate()` 方法,以确保执行了父类的初始化操作,
// 然后通过 `setContentView()` 方法将活动的布局设置为 `activity_main.xml` 文件中定义的布局。@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// setContentView()方法的参数是一个布局资源的引用,指定了当前活动所使用的布局。setContentView(R.layout.activity_main);}
}

4、运行结果如下:

5、使用自定义View做屏幕适配。

package com.example.myview;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;
//自定义View可以根据屏幕的宽高来动态设置UI元素的大小和位置,实现屏幕适配。
//当应用在不同分辨率和尺寸的设备上运行时,UI元素会根据屏幕大小自动进行调整,从而适配不同的屏幕。
//使用自定义View.控制UI元素的大小和位置。
public class CustomView2 extends View {// 构造方法public CustomView2(Context context) {super(context);}// 重写onDraw方法,在该方法中绘制UI元素@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 获取屏幕宽高int screenWidth = getResources().getDisplayMetrics().widthPixels;int screenHeight = getResources().getDisplayMetrics().heightPixels;// 设置UI元素的大小和位置int viewWidth = screenWidth / 2; // 设置View宽度为屏幕宽度的一半int viewHeight = screenHeight / 4; // 设置View高度为屏幕高度的四分之一int posX = screenWidth / 4; // 设置View水平位置为屏幕宽度的四分之一int posY = screenHeight / 8; // 设置View垂直位置为屏幕高度的八分之一// 绘制一个矩形Paint paint = new Paint();paint.setColor(Color.BLUE);canvas.drawRect(posX, posY, posX + viewWidth, posY + viewHeight, paint);}
}

6、在MainActivity中调用自定义View。

package com.example.myview;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
//AppCompatActivity是 Android Support 库提供的一个类,
//它使得应用程序可以在旧版本的 Android 上运行时,使用新版的 API。
public class MainActivity extends AppCompatActivity {
//onCreate()方法是一个生命周期方法,在活动被创建时调用。
// 在这个方法中,首先调用了父类的 onCreate()方法,以确保执行了父类的初始化操作,
// 然后通过 setContentView() 方法将活动的布局设置为 activity_main.xml文件中定义的布局。@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 创建自定义View实例CustomView2 customView2 = new CustomView2(this);// 将自定义View添加到布局中setContentView(customView2);}
}

7、运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2979295.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

idea 通过maven构建无法使用@SpringBootApplication

问题描述 SpringBootApplication标红&#xff0c;没有提示&#xff0c;无法启动springboot使用maven构建。通过idea的标准版本构建 原因 springboot构建启动依赖spring-boot-maven-plugin idea的标准版本没有指定构建版本&#xff0c;然后在springboot-parent里面没有指定默…

云原生的基石:containerd引领未来容器发展趋势

文章目录 一、Containerd简介&#xff1a;容器技术的心脏二、Containerd核心原理解析三、Containerd与Docker的关系四、Containerd在云原生应用部署中的作用五、Containerd的扩展性和插件机制六、Containerd的安全特性七、Containerd的性能优化八、Containerd的社区和生态系统九…

Git 仓库内容操作

Git 仓库内容操作 | CoderMast编程桅杆Git 仓库内容操作 添加文件到暂存区 使用如下指令将工作区的文件添加到暂存区&#xff0c;告诉 Git 在下次 commit 时哪些文件做出了修改。 commit 指令详看后续 添加一个或多个文件到暂存区&#xff1a; 添加指定目录到暂存区 添加当前目…

uniapp制作多选下拉框和富文本(短信页面)

实例 多选下拉框实现 http://t.csdnimg.cn/TNmcF 富文本实现 http://t.csdnimg.cn/Ei1iV

C++面向对象程序设计 - 运算符重载

函数重载就是对一个已有的函数赋予新的含义&#xff0c;使之实现新的功能。因此一个函数名就可以用来代表不同功能的函数&#xff0c;也就是一名多用。运算符也可以重载&#xff0c;即运算符重载&#xff08;operator overloading&#xff09;。 一、运算符重载的方法 运算符重…

node+vue3的websocket前后端消息推送

nodevue3的websocket前后端消息推送 前期写web项目时&#xff0c;前端获取数据的方式一般是向后端发起数据请求&#xff0c;然后后端向前端发送数据&#xff0c;然后对数据进行渲染&#xff0c;这是最常规的一种数据通讯方式&#xff0c;适用于绝大部分前后端分离的项目 实际…

autodesk系列软件安装错误1603,手动安装Autodesk Desktop Licensing Service之后,启动服务提示错误1067

一般Autodesk Desktop Licensing Service这个服务没安装或者不正常会导致autodesk系列软件安装错误1603或者其他报错。 手动安装Autodesk Desktop Licensing Service之后&#xff0c;启动服务提示错误1067&#xff0c; 解决方法如下 打开autoremove点击扩展功能&#xff0c;输…

idea上传项目到gitee(码云)

1、打开码云&#xff0c;新建仓库 2、创建 3、这就是创建成功的页面 4、复制仓库地址&#xff0c;后面需要用到 2、打开我们的项目&#xff1a;例如我现在的项目 1、idea创建git仓库 2、选择我们项目文件夹的目录 3、查看文件是否变色&#xff0c;变色表示成功了 4、添加到缓…

广东理工学院携手泰迪智能科技成功部署人工智能实验室

广东理工学院是经国家教育部批准设立的全日制普通本科院校&#xff0c;入选全国应用型人才培养工程培养基地、国家级众创空间试点单位、广东省高校电子商务人才孵化基地。开设34个本科专业&#xff0c;涵盖工学、经济学、管理学、文学、艺术学、教育学等6大学科门类&#xff0c…

智慧水务是什么样的?如何打造智慧水务大屏?

在信息化和数字化快速发展的今天&#xff0c;智慧水务作为城市供水管理的重要组成部分&#xff0c;正变得越来越重要。智慧水务大屏作为智慧水务系统的可视化核心&#xff0c;不仅提升了水务管理的效率&#xff0c;而且通过数据的实时监控和分析&#xff0c;为决策者提供了强有…

代码随想录算法训练营day40

题目&#xff1a;343. 整数拆分、96.不同的二叉搜索树 参考链接&#xff1a;代码随想录 343. 整数拆分 思路&#xff1a;五部曲来走。dp数组&#xff0c;dp[i]用于记录拆i得到的最大乘积和&#xff0c;我们要求的也就是dp[n]&#xff1b;递推公式&#xff0c;我们想拆分i&am…

便携式应急指挥箱规格参数

概况: 微缩型的无线视频音频传输的机动挥所。体积小、重量轻、公配电方便、携带便携、功能齐全。可进行单兵作战&#xff0c;通过此无线音频视频传输的指挥箱能完成现场图像、语音、数据的采集等功能&#xff0c;可以通过5G/4G/WIFI等多种无线网络完成传输的需求&#xff0c;或…

前端性能分析工具及使用

Lighthouse Lighthouse &#xff08;谷歌浏览器的插件商店中搜索并安装&#xff0c;浏览器中点击F12&#xff0c;开发者工具中可使用&#xff09;是 Google 开发的一款工具&#xff0c;用于分析网络应用和网页&#xff0c;收集现代性能指标并提供对开发人员最佳实践的意见。只要…

2024年最新版云开发cms开通步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方有改版了&#xff0c;搞得石头哥不得不紧急的再新出一版&#xff0c;教大家开通最新版的cms网页管理后台 一&#xff0c;技术选型和技术点 1&#xff0c;小程序前端 wxml css JavaScript MINA原生小程序框架 2&#xff0c;数据库 云开发 云数据库 云…

HTTP慢连接攻击的原理和防范措施

随着互联网的快速发展&#xff0c;网络安全问题日益凸显&#xff0c;网络攻击事件频繁发生。其中&#xff0c;HTTP慢速攻击作为一种隐蔽且高效的攻击方式&#xff0c;近年来逐渐出现的越来越多。 为了防范这些网络攻击&#xff0c;我们需要先了解这些攻击情况&#xff0c;这样…

C++判断一个点是否在一个在任意空间中的长方体中

目录 不旋转的长方体计算旋转矩阵及旋转后的长方体计算旋转矩阵计算旋转后的长方体 判断点是否在旋转后的长方体内 不旋转的长方体 如果这个长方体是规则的&#xff0c;不进行任何旋转&#xff0c;可以先计算长方体的BoundingBox&#xff0c;判断点是否在3D的BoundingBox中即可…

软硬件无缝集成:新加坡量子公司首创下一代量子集成平台

为了充分发挥量子系统的性能&#xff0c;已经公认的一个关键方法是在硬件和软件层之间实现紧密集成。这种集成使得软件能够充分利用硬件的所有特性&#xff0c;以实现最佳性能。随着行业努力开发能够提供量子优势的系统&#xff0c;实现这种高性能显然是非常必要的。 Horizon的…

Python学习从0开始——项目一day02数据库连接

Python学习从0开始——项目一day02数据库连接 一、在线云数据库二、测试数据库连接三、数据库驱动介绍四、SQL执行4.1插入测试数据4.2安装数据库连接模块4.3测试SQL语句执行4.4执行SQL的固定步骤及示例 一、在线云数据库 找了一个在线数据库&#xff0c;需要邮箱注册&#xff…

Linux系统中安装MySQL

1、在电脑中安装虚拟机 2、df -h查看光盘是否挂载&#xff0c;没挂载用mount -o ro /dev/sr0 /media命令挂载 3、进入etc/yum.repos.d目录查看仓是否配置&#xff0c;若配置进行下一一步&#xff0c;未配置则进行配置 配置软件仓库 [rootlocalhost yum.repos.d]# vim rhle.r…

tcp inflight 守恒算法背后的哲学

tcp inflight 守恒拥塞控制的正确性 很久以前我开始纠结 tcp 锯齿&#xff0c;很多年后我知道这叫 capacity-seeking&#xff0c;甚至说 tcp 属于 capacity-seeking protocol 的原因就是它早已深入人心的 aimd 行为&#xff0c;而该行为生成了 tcp 锯齿。 在消除锯齿&#xf…