安卓学习笔记5.3 按钮、图像视图与图像按钮

news2024/11/27 3:58:10

文章目录

  • 零、本讲学习目标
  • 一、导入新课
    • 二、新课讲解
    • (一)按钮控件
      • 1、继承关系图
      • 2、常用属性
    • (二)图像视图
      • 1、继承关系图
      • 2、常用属性
    • (三)图像按钮
      • 1、继承关系图
      • 2、常用属性
    • (四)教学案例:通过按钮缩放图片
      • 1、创建安卓应用
      • 2、准备图片素材
      • 3、字符串资源文件
      • 4、主布局资源文件
      • 5、主界面类实现功能
      • 6、启动应用,查看效果
  • 三、归纳总结
  • 四、上机操作

零、本讲学习目标

  1. 熟练使用按钮和图像按钮
  2. 熟练使用图像视图显示图片

一、导入新课

  • 安卓应用中,按钮一般用于用户点击确认某项功能,当然也可以用图像按钮。显示图片,我们经常使用图像视图(ImageView)。一个界面最好能图文并茂,给用户较好的体验。

二、新课讲解

在这里插入图片描述

(一)按钮控件

1、继承关系图

  • Button是TextView的子类
    在这里插入图片描述

2、常用属性

属性含义
text文本内容
textSize文本字号,单位:sp
textColor文本颜色,#ff0000 - 红色
background背景颜色或背景图片
layout_height高度,单位:dp (wrap_content, match_parent)
layout_weight宽度,单位:dp (wrap_content, match_parent)
onClick单击事件(用于绑定事件处理方法)

(二)图像视图

1、继承关系图

  • ImageView是View的子类
    在这里插入图片描述

2、常用属性

属性含义
layout_height高度,单位:dp (wrap_content, match_parent)
layout_weight宽度,单位:dp (wrap_content, match_parent)
src源(用于设置图片源)
background背景(用于设置背景图片)
scaleType缩放类型(fitXY)
tint蒙版

(三)图像按钮

1、继承关系图

  • ImageButton是ImageView的子类
    在这里插入图片描述

2、常用属性

属性含义
layout_height高度,单位:dp (wrap_content, match_parent)
layout_weight宽度,单位:dp (wrap_content, match_parent)
src源(用于设置图片源)
background背景(用于设置背景图片)

(四)教学案例:通过按钮缩放图片

1、创建安卓应用

  • 基于Empty Activity模板创建安卓应用 - ZoomImageByButton
    在这里插入图片描述
  • 单击【Finish】按钮
    在这里插入图片描述

2、准备图片素材

  • 将三张图片拷贝到drawable目录
    在这里插入图片描述

3、字符串资源文件

  • 字符串资源文件 - strings.xml
    在这里插入图片描述
<resources>
    <string name="app_name">通过按钮缩放图片</string>
    <string name="enlarge_image">放大图片</string>
    <string name="shrink_image">缩小图片</string>
</resources>

4、主布局资源文件

  • 主布局资源文件 - activity_main.xml
    在这里插入图片描述
  • 将默认的约束布局改成线性布局,设置相关属性
    在这里插入图片描述
  • 添加两个线性布局
    在这里插入图片描述
  • 在第一个子线性布局里添加两个按钮和一个图像按钮
    在这里插入图片描述
  • 在第二个子线性布局里添加一个图像控件,显示米老鼠
    在这里插入图片描述
  • 查看完整代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    android:orientation="vertical"
    android:padding="10dp"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center">

        <Button
            android:id="@+id/btn_shrink_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:onClick="doShrinkImage"
            android:text="@string/shrink_image" />

        <Button
            android:id="@+id/btn_enlarge_image"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:onClick="doEnlargeImage"
            android:text="@string/enlarge_image" />

        <ImageButton
            android:id="@+id/btn_exit"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="@drawable/exit"
            android:onClick="doExit" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center">

        <ImageView
            android:id="@+id/iv_mickey"
            android:layout_width="200dp"
            android:layout_height="300dp"
            android:background="@drawable/mickey" />
    </LinearLayout>
</LinearLayout>
  • 查看预览效果
    在这里插入图片描述

5、主界面类实现功能

  • 主界面类 - MainActivity
    在这里插入图片描述
  • 声明变量
    在这里插入图片描述
  • 通过资源标识符获取控件实例
    在这里插入图片描述
  • 获得屏幕尺寸
    在这里插入图片描述
  • 获取图像尺寸
    在这里插入图片描述
  • 编写【缩小图片】按钮单击事件处理方法
    在这里插入图片描述
  • 编写【放大图片】按钮单击事件处理方法
    在这里插入图片描述
  • 编写【关闭】图像按钮单击事件处理方法
    在这里插入图片描述
  • 查看完整代码
package net.hw.zoom_image;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private ImageView ivMickey; // 米老鼠图像控件
    private double imageWidth; // 图像宽度
    private double imageHeight; // 图像高度
    private double screenWidth; // 手机屏幕宽度
    private double screenHeight; // 手机屏幕高度
    private double scale = 0.95; // 缩小比例

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);

        // 通过资源标识符获取控件实例
        ivMickey = findViewById(R.id.iv_mickey);

        // 获得屏幕尺寸
        screenWidth = getWindowManager().getDefaultDisplay().getWidth();
        screenHeight = getWindowManager().getDefaultDisplay().getHeight();

        // 获取图像尺寸
        imageWidth = ivMickey.getLayoutParams().width;
        imageHeight = ivMickey.getLayoutParams().height;
    }

    /**
     * 【缩小图片】按钮单击事件处理方法
     *
     * @param view
     */
    public void doShrinkImage(View view) {
        // 获取图像新尺寸
        int newWidth = (int) (imageWidth * scale);
        int newHeight = (int) (imageHeight * scale);
        // 按新尺寸设置图像(不能缩小为零,否则不能再放大)
        if (newWidth > 50) {
            // 按新尺寸设置图像
            ivMickey.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newHeight));
            // 更新图像尺寸变量
            imageWidth = ivMickey.getLayoutParams().width;
            imageHeight = ivMickey.getLayoutParams().height;
        } else {
            Toast.makeText(this, "温馨提示:图片不能再缩小,要不然看不见咯~",Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * 【放大图片】按钮单击事件处理方法
     *
     * @param view
     */
    public void doEnlargeImage(View view) {
        // 获取图像新尺寸
        int newWidth = (int) (imageWidth / scale);
        int newHeight = (int) (imageHeight / scale);
        // 按新尺寸设置图像(不能再放大,否则就出界了)
        if (newWidth < screenWidth) {
            // 按新尺寸设置图像
            ivMickey.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newHeight));
            // 更新图像尺寸变量
            imageWidth = ivMickey.getLayoutParams().width;
            imageHeight = ivMickey.getLayoutParams().height;
        } else {
            Toast.makeText(this, "温馨提示:图片不能再放大,要不然就出界咯~",Toast.LENGTH_SHORT).show();
        }
    }

    /**
     * 【关闭】图像按钮单击事件处理方法
     *
     * @param view
     */
    public void doExit(View view) {
       finish(); // 关闭当前窗口
    }
}

6、启动应用,查看效果

  • 通过三个按钮来操作
    在这里插入图片描述
  • 录屏演示操作
    在这里插入图片描述

三、归纳总结

  • 回顾本节课所讲的内容,并通过提问的方式引导学生解答问题并给予指导。

四、上机操作

  • 形式:单独完成
  • 题目:切换缩放图片(泸职院掠影)
  • 要求:切换图片(通过普通按钮或者手势滑动);缩放图片(通过缩放按钮ZoomControls来实现)
    在这里插入图片描述

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

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

相关文章

vue无需改动代码的SEO【百度爬取】优化--puppeteer(详细流程)

vue无需改动代码的SEO优化–puppeteer&#xff08;详细流程&#xff09; 目录vue无需改动代码的SEO优化--puppeteer&#xff08;详细流程&#xff09;一级目录二级目录三级目录一、安装puppeteer&#xff1a;npm install puppeteer --save安装依赖二、编写puppeteer服务js文件p…

DDD领域驱动设计基础

什么领域驱动模型 领域驱动模型一种设计思想&#xff0c;我们又称为DDD设计思想。是一种为了解决传统设计思想带来的维护困难&#xff0c;沟通困难和交互困难而产生的一种新的思想。 架构模式的演进 单体架构 采用面向对象的设计方法&#xff0c;系统包括业务接入层、业务逻…

Eclipse切JRE环境后如何恢复- Unrecognized option: --enable-preview

场景 使用switch 新特性 配合 lambda 练习小案例 // 需求&#xff1a; 1 2 3 -> 一、二、 三 int num 1; switch ( num) {// jdk13 可以缺省 break 并且 单语句可以省略 花括号 case 1 -> { System.out.println("一"); }case 2 -> System.out.p…

[附源码]计算机毕业设计JAVAjsp宠物店管理系统

[附源码]计算机毕业设计JAVAjsp宠物店管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybat…

Mybatis-Plus知识点[MyBatis+MyBatis-Plus的基础运用]

目录 前言 一、了解Mybatis-Plus 1.简介 2.Mybatis-Plus具有的特性 3.支持数据库 4.框架结构 5.官网链接 二、快速开始 2.1.创建数据库以及表 2.2.创建工程 2.3 MybatisMybatis-Plus的使用 2.3.1创建一个itcast-mybatis-plus-simple的maven项目 2.3.2写UserMapper接口 2.3.3写U…

北京化工大学数据结构2022/11/3作业 题解

目录 问题 A: 二叉树非递归前序遍历-附加代码模式 问题 B: 二叉树非递归中序遍历-附加代码模式 问题 C: 二叉树非递归后序遍历-附加代码模式 问题 D: 求二叉树中序遍历序根节点的下标 问题 E: 根据前序中序还原二叉树 问题 F: 算法6-12&#xff1a;自底向上的赫夫曼编码 …

ServletConfig和ServletContext接口

一、ServletConfig接口详解 1、简介 Servlet 容器初始化 Servlet 时&#xff0c;会为这个 Servlet 创建一个 ServletConfig 对象&#xff0c;并将 ServletConfig 对象作为参数传递给 Servlet 。通过 ServletConfig 对象即可获得当前 Servlet 的初始化参数信息。一个 Web 应用中…

微电网优化调度(风、光、储能、柴油机)(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; ​ &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻…

【Linux命令】文件和目录权限

【Linux命令】文件和目录权限 权限查看 众所周知&#xff0c;可以使用 ls -l 来查看文件和目录的详细信息&#xff0c;那么输出的东西是什么呢&#xff1f; 我们先来看 文件类型&#xff1a; -&#xff1a;普通文件&#xff1b;d&#xff1a;目录文件&#xff1b;b&#xff…

网络协议:TCP三次握手与四次挥手

本篇内容包括&#xff1a;TCP/IP 传输协议&#xff08;TCP/IP 传输协议简介&#xff0c;IP 协议&#xff0c;UDP 协议&#xff0c;TCP 协议介绍&#xff09;&#xff0c;TCP 的三次握手、TCP 的四次挥手 以及 TCP 协议是怎么保证有效传输等内容。 一、TCP/IP 传输协议 1、TCP/…

【仿牛客网笔记】 Redis,一站式高性能存储方案——Redis入门

Redis可以开发对性能要求较高的功能。还可以利用Redis重构我们现有的功能。 NoSQL关系型数据库之外的统称。 快照有称为RDB 以快照的形式 不适合实时的去做&#xff0c;适合一段时间做一次。 日志又称AOF 以日志的形式每执行一次就存入到硬盘中&#xff0c;可以做到实时的存储以…

JAVA外卖订餐系统毕业设计 开题报告

本文给出的java毕业设计开题报告&#xff0c;仅供参考&#xff01;&#xff08;具体模板和要求按照自己学校给的要求修改&#xff09; 选题目的和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于java的外卖点菜系统&#xff0c;管理员通过后台添加菜品&#xf…

卷积神经网络CNN

卷积神经网络CNN CNN通常用于影像处理 为什么需要CNN 为什么需要CNN&#xff0c;我用普通的fully connected的反向传播网络进行图像训练会怎样 需要过多参数 假设一张彩色的图为100100的&#xff0c;那么像素点就是1001003&#xff0c;那么输入层为三万维 假设下一层隐含层有…

移动Web:Less 预处理及Koala工具

css 预处理器&#xff0c;后缀名为 .less。 less 代码无法被浏览器识别&#xff0c;实际开发需要转换成 css&#xff0c;使用 liink 标签引入 css 文件。 插件工具 Easy Less VS Code 内置插件&#xff08;less 文件保存自动生成 css 文件&#xff09; 更改编译后 css 存储路径…

华清远见11.7

系统移植开发阶段部署 1.准备文件&#xff0c;由于内核只支持安全的启动模式&#xff0c;要准备u-boot镜像文件u-boot-stm32mp157a-fsmp1a-trusted.stm32 TF-A镜像文件tf-a-stm32mp157a-fsmp1a-trusted.stm32 linux内核镜像文件uImage和stm32mp157a-fsmp1a.dtb 根文件系统r…

QT 中多线程实现方法总结

第一&#xff1a; 用QtConcurrentRun类&#xff0c;适合在另一个线程中运行一个函数。不用继承类&#xff0c;很方便 第二&#xff1a;用QRunnable和QThreadPool结合。继承QRunnable&#xff0c;重写run函数&#xff0c;然后用QThreadPool运行这个线程。缺点是不能使用信号和槽…

html5 -- canvas使用(1)

canvas 设置canvas标签 添加宽高 默认单位为px <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"viewport&…

荧光标记氨基酸:荧光标记DL-天门冬氨酸,荧光标记甘氨酸-DL-天冬氨酸,DL aspartic acid labeled

产品名称&#xff1a;荧光标记甘氨酸-DL-天冬氨酸&#xff0c;DL aspartic acid labeled 甘氨酸-DL-天冬氨酸是一种化学物质&#xff0c;化学式是C6H10N2O5&#xff0c;分子量是208.17。 DL-天门冬氨酸(DL-Asp)在医药方面有着重要的用途,可用于合成DL-天门冬氨酸钾镁盐(脉安定…

云原生之K8s—yaml文件

目录 一、K8S支持的文件格式 1、yaml和json的主要区别 二、YAML 2.1、查看API资源版本标签 2.2、编写资源配置清单 编写nginx-test.yaml资源配置清单 创建资源对象 查看创建的pod资源 创建资源对象 网页访问一下 K8S中的port概述 创建yaml文件模板 查看生成yaml格式…

【python的静态方法,classmethod方法和__call___魔法方法】

classmethod魔法方法和staticmethodstaticmethod&#xff0c;静态方法classmethod&#xff0c;绑定类方法__call__&#xff0c;可调用类类方法staticmethod&#xff0c;静态方法 在python中&#xff0c;使用静态方法可以实现不需要实例化对象的绑定就可以直接调用的函数&#…