Android面试题之动画+事件处理篇

=================================================================

1、Android 中的动画有哪几类


帧动画、补间动画、属性动画


2、动画能组合在一起使用么?


可以将动画组合在一起使用AnimatorSet,

AnimatorSet.play() 播放当前动画的同时可以

  • .with() :将现有动画和传入的动画同时执行

  • .after() :将现有动画插入到传入的动画之后执行

  • .before() : 将现有动画插入到传入的动画之前执行


3、插值器的种类有哪些?


  • AccelerateDecelerateInterpolator :在动画开始与结束的地方速率改变比较慢,在中间的时候加速

  • AccelerateInterpolator:在动画开始的地方速率改变比较慢,然后开始速率变化加快

  • LinearInterpolator:以常量速率改变

  • AnticipateInterpolator:开始的时候向后然后向前甩

  • PathInterpolator:动画执行的效果按贝塞尔曲线

  • anticipateOvershootInterpolator:开始的时候向后然后向前甩一定值后返回最后的值

  • CycleInterpolator:动画循环播放特定的次数,速率改变沿着正弦曲线

  • OvershootInterpolator:向前甩一定值后再回到原来位置

  • BounceInterpolator:动画结束的时候有弹起效果


4.如何自定义插值器


写一个类实现Interpolator接口,

Interpolator是一个空的接口继承了TimeInterpolator接口,

定义getInterpolation方法即可


5.如何修改 Activity 进入和退出动画


可以通过两种方式,一是通过定义 Activity 的主题,二是通过覆写 Activity 的overridePendingTransition 方法。


事件处理

===================================================================

1、Handler 机制


Handler能充当子线程和主线程之间的桥梁。

通常将 Handler 声明在 Activity 中,然后覆写 Handler 中的 handleMessage 方法,当子线程调用 handler.sendMessage()方法后 handleMessage 方法就会在主线程中执行。

这里面除了 Handler、Message 外还有隐藏的 Looper 和 MessageQueue 对象。在主线程中 Android 默认已经调用了 Looper.preper()方法,调用该方法的目的是在 Looper 中

创建 MessageQueue 成员变量并把 Looper 对象绑定到当前线程中。当调用 Handler 的sendMessage(对象)方法的时候就将 Message 对象添加到了 Looper 创建的 MessageQueue队列中,同时给 Message 指定了 target 对象,其实这个 target 对象就是 Handler 对象。主线程默认执行了 Looper.looper()方法,该方法从 Looper 的成员变量 MessageQueue 中取出 Message。

然后调用 Message 的 target 对象的 handleMessage()方法。这样就完成了整个消息机制。


2、onTouch 和 onTouchEvent 有什么区别


这两个方法都是在 View 的 dispatchTouchEvent 中调用的,onTouch 优先于 onTouchEvent执行。如果在 onTouch 方法中通过返回 true 将事件消费掉,onTouchEvent 将不会再执行。

另外​
需要注意的是,onTouch 能够得到执行需要两个前提条件,第一 mOnTouchListener 的值不能为空,第二当前点击的控件必须是 enable 的。因此如果你有一个控件是非 enable 的,那么给它注册 onTouch 事件将永远得不到执行。对于这一类控件,如果我们想要监听它的 touch 事件,就必须通过在该控件中重写 onTouchEvent 方法来实现。


3、子线程中能不能 new handler?为什么?


不能,如果在子线程中直接 new Handler()会抛出异常

当我们在dao主线程中创建Handler对象的时制候没有问题,是因为主线程会自动调用Looper.prepare()方法去给当前主线程创建并设置一个Looper对象,随意在Handler构造函数中从当前线程的对象身上拿到这个Looper。

但是子线程中并不会自动调用这个方法,所以要想在子线程中创建Handler对象就必须在创建之前手动调用Looper.prepare()方法,否则就会报错。


4、子线程发消息到主线程进行更新 UI,除了 handler 和 AsyncTask,还有什么?


1、用 Activity 对象的 runOnUiThread 方法更新,在子线程中通过 runOnUiThread()方法更新 UI:

2、用 View.post(Runnable r)方法更新 UI


5、为什么系统不建议在子线程访问UI?


Android的UI访问是没有加锁的,多个线程可以同时访问更新操作同一个UI控件。也就是说访问UI的时候,android系统当中的控件都不是线程安全的,这将导致在多线程模式下,当多个线程共同访问更新操作同一个UI控件时容易发生不可控的错误,而这是致命的。所以Android中规定只能在UI线程中访问UI,这相当于从另一个角度给Android的UI访问加上锁,一个伪锁。


关于整理问题

最后

小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助

因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取
因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。**

[外链图片转存中…(img-cWplN8YU-1719086400346)]一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

资料⬅专栏获取

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

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

相关文章

通过开放解析智能分块提高 RAG 性能

如果要使用大型语言模型 ()LLMs 实现生成式 AI 解决方案,则应考虑使用检索增强生成 (RAG) 的策略来生成上下文感知提示LLM。在启用 LLM RAG 的预生产管道中发生的一个重要过程是删除文档文本,以便仅将文档中…

[数据集][目标检测]药片药丸检测数据集VOC+YOLO格式152张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):152 标注数量(xml文件个数):152 标注数量(txt文件个数):152 标注类别…

听说你还不会用Dagger2?Dagger2 For Android最佳实践教程

Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d(TAG,chef.cook()); } } 可以看到,在使用Dagger2的时候,使用者的代码会变得非常简洁。但是&#…

洛谷:P1085 [NOIP2004 普及组] 不高兴的津津

1. 题目链接 https://www.luogu.com.cn/problem/P1085 P1085 [NOIP2004 普及组] 不高兴的津津 2. 题目描述 题目描述:津津每天要上课还要上辅导班,每天学习超过8小时就不开心,帮忙检查下津津的下周日程安排,然后告诉我她哪天不高…

如何用好swoole/webman/workerman/hyperf呢

Webman框架的依赖 "require": { "php": ">7.2", "workerman/webman-framework": "^1.5.0",// "monolog/monolog": "^2.0" }, 依赖的核心框架也是很久的了 webman-framework的核心依赖 &q…

SpringCloud微服务框架的原理及应用详解(五)

本系列文章简介: 随着云计算、大数据和物联网等技术的飞速发展,企业应用系统的规模和复杂度不断增加,传统的单体架构已经难以满足快速迭代、高并发、高可用性等现代业务需求。在这样的背景下,微服务架构应运而生,成为了…

分布式架构的优势与实现

目录 前言1. 什么是分布式架构1.1 分布式架构的定义1.2 分布式架构的基本原理 2. 分布式架构的优势2.1 可扩展性2.2 容错性和高可用性2.3 性能优化2.4 灵活性和可维护性 3. 分布式架构的实现方法3.1 服务拆分3.1.1 功能拆分3.1.2 垂直拆分3.1.3 水平拆分 3.2 数据分布与存储3.2…

力扣907.子数组的最小值之和

力扣907.子数组的最小值之和 考虑每个数对答案的贡献 对于每个元素 找到左边界(严格小于) 右边界(小于等于) 这样出现重复元素也不会重复计算答案对于答案贡献为 arr[i] * (i - l) * (r - i) class Solution {const int MOD 1e97;public:int sumSubarrayMins(vector<int…

java—Mybatis缓存

缓存的作用 缓存(cache&#xff09;的作用是为了减轻数据库的压力&#xff0c;提高查询性能。 为什么使用缓存 mysql数据库保存的数据均在硬盘中&#xff0c;CPU是不会直接和硬盘进行交互的&#xff0c;因为硬盘的数据传输率很低&#xff0c;而CPU的数据传输率很高, CPU和内存直…

VBA技术资料MF165:关闭当前打开的所有工作簿

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

springBoot不同module之间互相依赖

在 Spring Boot 多模块项目中&#xff0c;不同模块之间的依赖通常是通过 Maven 或 Gradle 来管理的。以下是一个示例结构和如何设置这些依赖的示例。 项目结构 假设我们有一个多模块的 Spring Boot 项目&#xff0c;结构如下&#xff1a; my-springboot-project │ ├── p…

「前端+鸿蒙」鸿蒙应用开发-UI组件

在鸿蒙应用开发中,UI组件是构建用户界面的基本元素。以下是一些常用UI组件的介绍,包括它们的使用方式和示例代码。 1. 文本(Text) 文本组件用于在界面上显示文本内容。 import {Component, render, Text } from @ohos/arkui;class TextComponent extends Component {rend…

Spring (75)Spring Boot的部署最佳实践

在部署Spring Boot应用程序时&#xff0c;最佳实践通常涉及应用程序的打包、配置管理、健康检查、日志记录、安全、环境隔离和监控。以下是结合一些最佳实践的详细步骤和解释。 1. 打包和构建 Spring Boot应用程序通常打包为可执行的JAR文件&#xff0c;它包括应用程序和所有…

四年Android,终于咸鱼翻身!8K到25K全靠这份高级面试题+解析!

1、哪些情况下的对象会被垃圾回收机制处理掉&#xff1f; 2、讲一下常见编码方式&#xff1f; 3、utf-8 编码中的中文占几个字节&#xff1b;int 型几个字节&#xff1f; 4、静态代理和动态代理的区别&#xff0c;什么场景使用&#xff1f; 5、Java 的异常体系 6、谈谈你对解析…

写一个坏越的个人天地(一)

好久没写什么大点的项目了,今天想着写一个个人博客好了。I did it! 做个人天地。肯定得有个主题色吧。整个下拉界面,先准备三个色系吧 <el-header class="title"><el-dropdown @command="handleCommand"><span class="el-dropdown-…

若依4.7.8版本计划任务rce复现

0x00 背景 最近项目中发现很多单位都使用了若依二开的系统&#xff0c;而最近若依有个后台计划任务rce的漏洞&#xff0c;比较新&#xff0c;我还没复现过&#xff0c;于是本地搭建一个若依环境复现一下这个漏洞。 这个漏洞在4.7.8版本及之前都存在&#xff0c;现在最新版的若…

管理端开发如何快速理解并实现权限控制总结

管理端开发如何快速理解并实现权限控制总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在管理端开发中&#xff0c;权限控制是至关重要的一环。通过权限控…

647. 回文子串(leetcode)

647. 回文子串&#xff08;leetcode&#xff09; 题目描述 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中回文子串的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 示例1 输入&#xff1a;s “abc” 输出…

Golang | Leetcode Golang题解之第179题最大数

题目&#xff1a; 题解&#xff1a; func largestNumber(nums []int) string {sort.Slice(nums, func(i, j int) bool {x, y : nums[i], nums[j]sx, sy : 10, 10for sx < x {sx * 10}for sy < y {sy * 10}return sy*xy > sx*yx})if nums[0] 0 {return "0"…

Android 天气APP(八)城市切换 之 自定义弹窗与使用

然后在模块的utils包中新建一个LiWindow类 代码如下&#xff1a; package com.llw.mvplibrary.utils; import android.app.Activity; import android.content.Context; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; im…