Android Studio App开发入门之图形定制Drawable的讲解及实战(附源码 超详细必看)

2023-10-31

运行有问题或需要源码数据集请点赞关注收藏后评论区留言~~~

图形Drawable

Android把所有能够显示的图形都抽象为Drawable类,这里的图形不止是图片,还包括色块,画板,背景等等。包含图片在内的图形文件放在res的目录的各个drawable目录下,其实drawable目录一般保存描述性的XML文件,而图片文件一般放在具体分辨率的drawable目录下

形状图形

Shape图形又称形状图形,它用来描述常见的几何形状,用好形状图形可以让App页面不再呆板,还可以节省美工不少工作量。

形状图形的定义文件放在drawable目录下,它是以shape标签为为根节点的XML描述文件,根节点下定义了6个节点 分别是以下六个

size 尺寸 stroke 描边 corners 圆角 solid 填充 padding 间隔 gradient 渐变

 

 接下来演示一下形状图形的界面效果,首先右击drawable目录,并依次选择右键菜单的New -drawable resouruce file 然后ok即可生成一个XML文件 效果如下

 

 DrawableShape类代码如下

package com.example.chapter05;

import android.os.Bundle;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;

public class DrawableShapeActivity extends AppCompatActivity implements View.OnClickListener {
    private View v_content; // 声明一个视图对象

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawable_shape);
        // 从布局文件中获取名叫v_content的视图
        v_content = findViewById(R.id.v_content);
        // v_content的背景设置为圆角矩形
        v_content.setBackgroundResource(R.drawable.shape_rect_gold);
        // 给btn_rect设置点击监听器
        findViewById(R.id.btn_rect).setOnClickListener(this);
        // 给btn_oval设置点击监听器
        findViewById(R.id.btn_oval).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btn_rect) { // 点击了“圆角矩形背景”按钮
            // v_content的背景设置为圆角矩形
            v_content.setBackgroundResource(R.drawable.shape_rect_gold);
        } else if (v.getId() == R.id.btn_oval) { // 点击了“椭圆背景”按钮
            // v_content的背景设置为椭圆形状
            v_content.setBackgroundResource(R.drawable.shape_oval_rose);
        }
    }

}

圆角矩形的shape_rect_goldXML文件代码如下

<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 指定了形状内部的填充颜色 -->
    <solid android:color="#ffdd66" />

    <!-- 指定了形状轮廓的粗细与颜色 -->
    <stroke
        android:width="1dp"
        android:color="#aaaaaa" />

    <!-- 指定了形状四个圆角的半径 -->
    <corners android:radius="10dp" />

</shape>

椭圆形的shape_oval_roseXML文件代码如下

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >

    <!-- 指定了形状内部的填充颜色 -->
    <solid android:color="#ff66aa" />

    <!-- 指定了形状轮廓的粗细与颜色 -->
    <stroke
        android:width="1dp"
        android:color="#aaaaaa" />

</shape>

九宫格图片

将某张图片设置成视图背景时,如果图片尺寸太小,则系统会自动拉伸图片使之填满背景,可是一旦图片拉的过大,画面就会容易变得模糊,为了解决这个问题,Android专门设计了点九图片,扩展名为png,又带有.9的名字,因为该图片划分了3×3的九宫格区域 效果如下

 状态列表图形

常见的图形一般为静态图形,但有时会用到动态图形,比如按钮控件的背景在正常情况下时凸起的,在按下时时凹陷的,从按下到弹起的过程,用户便知道了点击了该按钮,根据不同的触摸情况变更图形状态,这种情况用到了Drawable的一个子类StateListDrawable,它在XML文件中规定了不同状态时候所呈现的图形列表 效果如下

可见按下了定制样式的按钮后颜色就变了 区分出不同 

DrawableState类代码如下

package com.example.chapter05;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

public class DrawableStateActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drawable_state);
    }
}

btn_nine_selectorXML文件代码如下

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/button_pressed" />
    <item android:drawable="@drawable/button_normal" />
</selector>

btn_orig_selectorXML文件代码如下 

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/button_pressed" />
    <item android:drawable="@drawable/button_normal_orig" />
</selector>

 

 activity_drawable_stateXML文件代码如下

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="5dp"
        android:text="默认样式的按钮"
        android:textColor="@color/black"
        android:textSize="17sp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="5dp"
        android:paddingLeft="8dp"
        android:paddingRight="8dp"
        android:background="@drawable/btn_nine_selector"
        android:text="定制样式的按钮"
        android:textColor="@color/black"
        android:textSize="17sp" />

</LinearLayout>

创作不易 觉得有帮助请点赞关注收藏~~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Studio App开发入门之图形定制Drawable的讲解及实战(附源码 超详细必看) 的相关文章

  • Android 手机作为 GSM 调制解调器在 PC 上发送/接收短信?

    是否可以将 Android 移动设备用作 PC 上的 GSM 调制解调器 我正在 net下开发应用程序来发送 接收短信等 现在我想通过 USB 将我的 Android 设备连接到我的 PC 并将其用作 GSM 调制解调器来与其通信 这里是参
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • 图像作为电子邮件附件

    我想构建一个应用程序 我可以在电子邮件中附加图像 打开图像并将其设置为我的壁纸 我想让它跨平台 所以你能告诉我是否可以使用phonegap 或者我是否必须为iphone和android构建一个本机应用程序 您好 如果您只想通过电子邮件附加图
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • logcat 中 mSecurityInputMethodService 为 null

    我写了一点android应显示智能手机当前位置 最后已知位置 的应用程序 尽管我复制了示例代码 并尝试了其他几种解决方案 但似乎每次都有相同的错误 我的应用程序由一个按钮组成 按下按钮应该log经度和纬度 但仅对数 mSecurityInp
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 不接受任何内容也不返回任何内容的函数接口[重复]

    这个问题在这里已经有答案了 JDK中是否有一个标准的函数式接口 不接受也不返回任何内容 我找不到一个 像下面这样 FunctionalInterface interface Action void execute 可运行怎么样 Functi
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • Android:无法使用 DbHelper 和 Contract 类将数据插入 SQLite

    public class Main2Activity extends AppCompatActivity private EditText editText1 editText2 editText3 editText4 private Bu
  • 我如何在java中读取二进制数据文件

    因此 我正在为学校做一个项目 我需要读取二进制数据文件并使用它来生成角色的统计数据 例如力量和智慧 它的设置是让前 8 位组成一个统计数据 我想知道执行此操作的实际语法是什么 是不是就像读文本文件一样 这样 File file new Fi
  • Android Studio 缓慢的增量构建

    我已经完成了许多步骤来完善我们的构建系统 those https stackoverflow com questions 16775197 building and running app via gradle and android st
  • 在 Samsung Galaxy S5 Android 5.0 上使用 MediaPlayer 加载音频流需要超过 10 秒

    由于更新至 Android 5 0 MediaPlayer 在 Samsung Galaxy S5 上无法正常工作 启动音频流后加载时间超过 10 秒 示例代码 MediaPlayer mPlayer new MediaPlayer Str
  • 通过系统应用程序以编程方式静默安装 apk(无需 root)

    我有带有 android sharedUserId android uid system UID 1000 的系统级应用程序 设备未root INSTALL PACKAGES 权限包含在清单中 我可以静默安装下载的 apk 吗 我已经发现这
  • 插件“Android Bundle Support”不兼容

    大家好 自从上次更新以来 当我启动 android studio 时 我遇到了一个非常奇怪的错误 我有这个错误 插件错误 插件 Android Bundle Support 不兼容 直到构建 AI 195 SNAPSHOT 我在网上找不到任
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 在java中为组合框分配键

    我想添加一个JComboBox在 Swing 中这很简单 但我想为组合中的每个项目分配值 我有以下代码 JComboBox jc1 new JComboBox jc1 addItem a jc1 addItem b jc1 addItem
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • 红黑、B、B+————数据结构//复习复习复习

    二叉排序树 树型操作鼻祖 其他树的增删查都如此 平衡二叉树 查找效率最高 但维护成本高 对平衡二叉树的插入操作而言 其本质上比二叉排序树 BST 的插入操作多了一个平衡操作 解决了二叉排序树插入操作可能出现的斜树 不平衡问题 我们以插入一个
  • 【Python】刷题常用语法汇总

    Python刷题常用语法汇总 一 字符串操作 字符串是不可更改的对象 因此无法直接修改字符串的某一位字符 一种可行的方式是 将字符串转换为列表 修改列表的元素后 再重新连接为字符串 s thisisastring l list s l 0
  • Java代码实现本地创建文件,读取文件,删除指定目录下的文件

    目录 一 需求 二 实现 1 完成创建文件 写入文件 2 读取文件 3 删除文件 测试 注意 java的split方法分割字符串 分隔符如 及注意点 一 需求 1 创建文件夹 以规定格式保存信息到指定文件 并存放在相应目录下 2 在保存的目
  • 第一次实验:Protocol Layers

    第一次实验 Protocol Layers 捕获跟踪 Pick a URL and fetch it with wget or curl 检查跟踪 数据包结构 协议开销 复用密钥 Which Ethernet header field is
  • 服务器出现TIME_WAIT和CLOSE_WAIT的原因以及解决方法

    来自 http blog csdn net shootyou article details 6622226 昨天解决了一个HttpClient调用错误导致的服务器异常 具体过程如下 http blog csdn net shootyou
  • SpringBoot(一)——注解配置

    文章目录 一 简介 1 概述 2 特性 3 四大核心 二 搭建环境 三 入门小程序 HelloWorld 四 配置文件 1 YML文件 2 YML语法 lt 1 gt 基本语法 lt 2 gt 值的写法 1 字面量 数字 字符串 布尔 2
  • PLSQL Developer 代码助手卡顿优化

    支持付费优化 原因分析 代码助手卡顿来源于 不考虑网络和软件版本等影响 A 从已连接的数据库的数据字典中 读取该表的列信息 B 将读取到的列信息返回到plsql编辑器 并进行字符处理 然后显示 如何优化B 这个勾勾是维持IDE的代码和数据库
  • TCP/IP常见协议及协议号及端口号

    TCP IP常见协议及协议号及端口号 协议 ICMP 1 Internet控制报文协议 IGMP 2 Internet组管理协议 TCP 6 传输控制协议 EGP 8 外部网关协议 IGP 9 专用内部网关协议 UDP 17 用户数据报协议
  • 浅谈编程语言的函数与方法

    在编程中 函数 Function 和方法 Method 是非常重要的概念 都是在编程中用来执行特定功能的代码块 可以被调用或重复使用 从而提高代码的可读性 可维护性和重用性 函数 函数是一个独立的代码片段 它实现特定功能并返回结果 它可以独
  • muduo库源码分析和总结

    陈硕大神的muduo库设计巧 但是难读懂 这里简单做个总结 注意回调函数太多 需仔细研究回调的传递和调用 两个核心梳理主线 EventLoopThreadPool start EventLoop runInLoop 其次陈硕认为网络编程的本
  • 适合大学生兼职做的8个副业推荐

    说起在大学兼职赚钱 我总结了8个适合大学生的兼职方式 毕竟在大学想要自己的生活更精彩一点 仅靠家里给的生活费是显然不够的 如果你正在寻找一些适合大学生的兼职 那么以下这些兼职可能会是不错的选择 1 淘宝兼职设计 如果你的专业与设计有关 那么
  • java可变参数(不定向参数)

    java可变参数的作用 在编写方法的过程中 可能会遇见一个方法有不确定参数个数的情况 一般我们会用方法重载来解决问题 1 方法重载 解决参数个数不确定问题 2 public void method 3 public void method
  • python-selenium运行报chromedriver与chrome不匹配解决方案

    selenium common exceptions SessionNotCreatedException Message session not created This version of ChromeDriver only supp
  • kafka学习笔记总结

    kafka学习笔记总结 参考 http orchome com kafka index https blog csdn net qq 24084925 article details 78842844 角色说明 Message 通信的基本单
  • zabbix实现httpd监控

    zabbix z biks 是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案 zabbix能监视各种网络参数 保证服务器系统的安全运营 并提供灵活的通知机制以让系统管理员快速定位 解决存在的各种问题 zabbi
  • Mixlab工作坊工具箱:talking face

    Talking face 是一种计算机图形学和人工智能的技术 可以实现将一段音频转换为逼真的人脸动画 它可以用于视频游戏 虚拟主持人 语音助手等应用中 使人机交互更加自然和生动 1 SadTalker Video Lip Sync 基于Sa
  • 无涯的技术与成长的迷茫

    记得上大学之前 老师会为我们规划好一切 什么时候要高考 在什么时间点应该掌握哪些技能 每天要学什么 作业是什么 什么时候要放假了 一切都清晰明了 忙碌 但也充实 而上了大学后 感受最深的一点就是迷茫 没有方向 再也没有人为自己规划好一个明确
  • 【Spring从入门到实战】第 6 讲:SpringBoot 的事务管理

    本文已收录于专栏 Spring从入门到实战 专栏前言 大家好 我是执梗 本专栏将从Spring入门开始讲起 详细讲解各类配置的使用以及原因 到使用SpringBoot进行开发实战 旨在记录学习生活的同时也希望能帮到大家 如果对您能有所帮助
  • Google Maven Replacer Plugin插件详解

    在Maven项目的构建过程中 对于Maven标准预定义变量 或者
  • Android Studio App开发入门之图形定制Drawable的讲解及实战(附源码 超详细必看)

    运行有问题或需要源码数据集请点赞关注收藏后评论区留言 图形Drawable Android把所有能够显示的图形都抽象为Drawable类 这里的图形不止是图片 还包括色块 画板 背景等等 包含图片在内的图形文件放在res的目录的各个draw