Android UI
文章平均质量分 80
阿飞__
熟悉 Android、C++ 等
展开
-
Android手势识别GestureDetector和ScaleGestureDetector介绍与使用,以自定义一个可拖拽拉伸的ImageView为例
GestureDetector主要用于检测单指手势,例如单击、长按、滑动等,不支持多指手势。用于检测缩放手势,即双指捏合或者扩张的手势。它提供了 onScale() 和 onScaleBegin() 等回调方法来处理缩放手势的开始、进行中和结束时的事件。首先,我们可以直接继承 ImageView,并通过 Matrix 来控制图片的移动和拉伸。其次,使用 GestureDetector 监听移动的相关事件,使用 ScaleGestureDetector 监听拉伸的相关事件。原创 2024-04-07 19:04:32 · 2291 阅读 · 0 评论 -
Android Activity 启动时获取View的宽高为0?正确获取View宽高的方式
方法对于确保在视图完成布局后执行操作非常有用,但在处理复杂布局时需要谨慎使用,以避免引入不必要的延迟,更推荐使用下面这种。方法去获取 View 的宽高信息,会发现拿到的宽高大概率都是0。这是由于 View 很可能还未完成布局,而没有宽高信息。通过 View 的 ViewTreeObserver 添加一个监听事件,在 View 的大小完成计算后自动回调。备注:AndroidX 中可以使用。判断是否已经完成布局,即。使用 View 类的。原创 2023-10-19 15:53:49 · 645 阅读 · 0 评论 -
Android Camera2 SessionConfiguration介绍和使用
最近在相机开发中发现已经被标记为过时(@Deprecated)的函数了,取而代之的是函数。因为不建议在主线程中执行回调,所以通常我们会创建一个相机的执行器。原创 2023-10-07 20:02:13 · 1215 阅读 · 1 评论 -
Android Camera2获取摄像头的视场角(FOV)信息
在摄影和计算机图形学中,FOV也经常与焦距(focal length)、相机镜头和投影类型(例如透视投影或正交投影)一起使用,以影响图像的外观和透视效果。不同的FOV设置可以用来创造不同的视觉效果,从而满足特定的需求和创意要求。FOV的大小会影响到用户或设备所能看到的景象的广度和逼真程度。较大的FOV可以提供更广阔的视野,使用户感到更加沉浸在虚拟现实环境或更好地观察到摄像机捕捉到的场景。然而,较大的FOV通常需要更复杂的设备和技术来实现。如图所示,要计算FOV,只要我们拿到传感器的长度。原创 2023-09-18 22:08:28 · 1823 阅读 · 0 评论 -
Android Camera2相机预览画面放大缩小(数码变焦DigitalZoom)功能实现
一、前言Android自定义相机开发中,常常会有通过手势放大或缩小相机预览画面的需求,即数码变焦DigitalZoom。二、接口说明1. 获取最大的放大倍数float maxZoom = mCameraCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM);怎么理解这个值呢?假设正常预览画面(即没有缩放)矩形为 activity_rect,放大后的预览画面矩形为 crop_rect,那么它们宽高的原创 2021-08-13 16:21:29 · 12025 阅读 · 5 评论 -
Android文件游览选择器(支持选择多个文件、支持选择文件和文件夹,返回文件路径)
一、效果预览用的图标都是网上到处拷贝的,仅仅做个示例使用。截图 gif二、思路首先我们需要一个 FilePickerActivity 去显示页面。里面包含一个标题栏(ToolBar)、路径文本(TextView)和文件列表(RecyclerView)。RecyclerView 需要使用一个 Adapter 展示内容,内容来自于 File 类的 listFiles() 函数。最后我们完善那些返回、单击进入文件夹、长按选择、空页原创 2021-03-23 17:44:05 · 2017 阅读 · 0 评论 -
Android底部导航栏,三种风格和实现
一、效果图展示 如果动图没有动的话,也可以看下面这个静态图 以下挨个分析每个的实现,这里只做简单的效果展示,大家可以基于目前代码做二次开发。二、BottomNavigationView 这是 Google 给我们提供的一个专门用于底部导航的 View,你只需要在新建 Activity 的时候选择 “Bottom Navigation Activity”,IDE 就会自动使用 Bo...原创 2018-07-07 12:36:53 · 138685 阅读 · 44 评论 -
自定义Camera系列之:TextureView + Camera
一、前言上一篇介绍了 自定义Camera系列之:SurfaceView + Camera,接着我们介绍使用 TextureView + Camera 的组合。为什么选择 TextureView ?由于 SurfaceView 是拥有一个独立的 Surface,不在 View hierachy 体系中,因此不支持动画和截图,而 TextureView 则没有该限制。TextureView 是...原创 2018-12-26 22:11:13 · 6763 阅读 · 6 评论 -
自定义Camera系列之:SurfaceView + Camera
一、前言之前一直想把 Camera 系列的写一下,拖了很久,现在慢慢填坑吧。首先介绍 SurfaceView + Camera 的组合。虽然从 Android 5.0 后推荐使用 Camera2 了,不过某些旧工程或者需要适配低版本的场景还是用得着旧的 Camer API 的。为什么选择 SurfaceView ?SurfaceView 在自己独立的线程中绘制,不会影响到主线程,内部使用双...原创 2018-12-25 23:34:16 · 10343 阅读 · 7 评论 -
自定义Camera系列之:SurfaceView + Camera2
一、前言之前已经介绍过过时的旧 Camera 的使用了,毕竟在从 Android 5.0 后推荐使用 Camera2 了,所以现在开始介绍 Camera2 相关使用。老规矩还是从 SurfaceView 说起。如果你对 Camera2 的相关类和接口还不熟悉,可以先看看下面这些介绍:CameraManager详解CameraDevice详解CameraCharacteristics详解...原创 2019-01-27 23:43:36 · 9112 阅读 · 10 评论 -
自定义Camera系列之:GLSurfaceView + Camera
一、前言假如你要使用 OpenGL ES 来渲染相机的话,使用 GLSurfaceView 将是一个很常用的选择。这里介绍 GLSurfaceView + Camera 的组合。虽然从 Android 5.0 后推荐使用 Camera2 了,不过某些旧工程或者需要适配低版本的场景还是用得着旧的 Camer API 的。为什么选择 GLSurfaceView ?GLSurfaceView 继...原创 2019-01-23 00:08:12 · 4716 阅读 · 8 评论 -
自定义Camera系列之:TextureView + Camera2
一、前言之前已经介绍过过时的旧 Camera 的使用了,毕竟在从 Android 5.0 后推荐使用 Camera2 了,所以现在开始介绍 Camera2 相关使用。该篇介绍 TextureView ,这也是谷歌示例中使用的组合。如果你对 Camera2 的相关类和接口还不熟悉,可以先看看下面这些介绍:CameraManager详解CameraDevice详解CameraCharact...原创 2019-01-31 00:12:52 · 5614 阅读 · 12 评论 -
自定义Camera系列之:GLSurfaceView + Camera2
一、前言假如你要使用 OpenGL ES 来渲染相机的话,使用 GLSurfaceView 将是一个很常用的选择。这里介绍 GLSurfaceView + Camera2 的组合。如果你对 Camera2 的相关类和接口还不熟悉,可以先看看下面这些介绍:CameraManager详解CameraDevice详解CameraCharacteristics详解CameraCapture...原创 2019-02-14 00:16:19 · 5759 阅读 · 3 评论 -
Android 中 GLSurfaceView 截图
GLSurfaceView 截取图像的时候,往往传统的方法并不行得通,我们发现使用 GLSurfaceView.getDrawingCache() 等方法得到的往往是一张纯黑的图,这是由于 GLSurfaceView 和 SurfaceView 一样都有一块透明的缓存区域,所以我们截取的往往只是这块透明的缓存区域。 方法一:下面这个方法是在 stackoverflow 上看到的一个方法...原创 2016-06-08 17:00:58 · 12268 阅读 · 14 评论 -
Android点击空白处隐藏输入框
通常我们在手机上使用输入框的时候,希望点击飞输入框区域,然后就能自动关闭输入框。 那么我们只需要在 Activity 中获取到点击事件,然后执行一个关闭输入框的操作就行。 实现代码如下:1.在 Activity 类中重写 onTouchEvent @Override public boolean onTouchEvent(MotionEvent event) {...原创 2018-05-01 11:50:30 · 2719 阅读 · 1 评论 -
Android自定义相机定点聚焦
我们知道一般相机中都有点击时自动聚焦点击区域的效果,那么在我们的自定义相机中要怎么实现这个效果呢 一、相关API在相机开发中,我们都应该了解到过Camera.Parameters这个类,很多相机的参数设置都是通过这个类来完成的。查看Camera的源码我们可以看到1.setFocusAreas(List<Area> focusAreas)方法 /** ...原创 2016-07-26 11:39:58 · 9873 阅读 · 3 评论 -
ClearEditText,自带清除功能的EditText
一、效果图二、特点1.简单。只有一个不到100行的类,且无任何依赖,也没有自定义属性2.高效。没有使用LinearLayout包含EditText+ImageView的组合形式实现,仅仅只有一个继承EditText的自定义view,减少了布局的嵌套和view的数量3.易用。看我代码中的调用就知道多简单了<?xml version="1.0" encoding="utf-8"?><...原创 2016-05-28 15:11:23 · 8772 阅读 · 5 评论 -
DropEditText,带下拉功能的EditText
带下拉功能的DropEditText!原创 2016-05-28 16:34:01 · 6687 阅读 · 3 评论 -
Android 仿微信通讯录功能,好友排序 + 字母索引
一、效果图展示 二、功能特点1.好友排序:按照拼音顺序对好友进行排序,兼容英文数字符号等2.字母索引:右侧字母导航条,既可拖动也可点击,联动ListView滑动 三、实现接下来就让我们一步步显示这个效果吧。1.右侧字母索引的导航条这个我们可以在网上找到很多类似的,你大可找一个自己喜欢的甚至自己写一个出来,这里我在网上找了一个带波浪效果的,看起来比较炫酷一点吧...原创 2016-05-29 14:58:58 · 19651 阅读 · 8 评论 -
Android View介绍、测量和绘制
1 Android控件架构 Android 中控件分为 ViewGroup 和 View。ViewGroup 作为父控件可包含和管理多个 View。通过 ViewGroup 整个界面上的控件形成了一个树形结构,即我们常说的控件树,上层控件负责下层控件的测量和绘制,并传递交互事件。即下图所示 通常情况下,在 Activity 中使用 setContentVi...原创 2016-06-09 16:41:09 · 1525 阅读 · 0 评论 -
Android自定义View
一、自定义View的步骤 1.创建一个类继承View或者View的子类 2.重写必要的构造方法 3.可以选择在values目录下创建一个attrs.xml的属性定义文件 <declare-styleable name="TopBar"> <attr name="title" format="string" />...原创 2016-06-10 13:37:33 · 812 阅读 · 0 评论 -
Android事件分发及拦截机制
一、MotionEvent 这是Android为触摸事件封装的一个类。只要是重写触摸相关方法,参数一般都含有MotionEvent,可见其重要性。其中包括的一些常用的重要属性和方法:MotionEvent.ActionDown:手指按下MotionEvent.ActionMove:滑动MotionEvent.ActionUp:手指抬起getX():获取相对于控件左上角的...原创 2016-06-11 13:54:53 · 1021 阅读 · 0 评论 -
ListView的常见使用技巧和扩展
1.使用ViewHolder模式提高效率 通过在自定义Adapter中定义一个内部类ViewHolder,可提高50%的效率。关于自定义Adapter的简单封装,可以看我的这个博客 http://blog.csdn.net/afei__/article/details/51502134 2.设置项目分隔线android:divider="@andr...原创 2016-06-12 21:13:21 · 1198 阅读 · 0 评论 -
Android View获取坐标值、相对距离的方法
首先看一张图 其中,触摸点表示点击的位置,View表示点击的控件,ViewGroup表示点击的控件所在的父容器,屏幕表示整个手机显示屏。View获取坐标的方法有: getTop:获取到的,是view自身的顶边到其父布局顶边的距离 getLeft:获取到的,是view自身的左边到其父布局左边的距离 getRight:获取到...原创 2016-06-14 20:55:58 · 17999 阅读 · 0 评论 -
Android实现滑动的七种方法
1.layout方法每次移动后,调用layout()方法对自己重新布局从而达到移动的效果 @Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getX(); int y = (int) event.getY(); swit...原创 2016-07-27 16:26:49 · 1942 阅读 · 0 评论 -
Android启用摄像头失败或者黑屏问题的几点原因
在 Android 开发中接触 Camera 的过程中,经常会碰到各种各样的问题,对于启用摄像头失败或者黑屏的情况,本人总结了一下几点原因,欢迎大家继续补充: 1.手机没有对应摄像头例如手机可能只有两个摄像头,下标从0开始,Camera.open(2)打开的是第3个摄像头就会出问题 private void openCamera(int cameraFacing) thro...原创 2016-05-30 18:35:59 · 25407 阅读 · 3 评论 -
Android避免反复弹出同一Toast
前言在Android开发中,当我们使用Toast提示一些消息的时候,比如点击某个按钮或者其它某个操作后会提示一条Toast,而Toast是会持续一段时间再消失的,但是当用户疯狂点击了这个按钮或者某个操作后,可能就会造成一条Toast反复弹出很多次,持续较长时间,这也许是我们不希望看到的,所以我们可以设定一个显示的时间间隔 代码package com.example.msi_cn....原创 2016-06-01 20:37:28 · 4399 阅读 · 0 评论 -
Android如何将软键盘回车换成搜索等按钮,EditText中imeOptions属性的使用
一、效果图如上图,在使用键盘输入的时候,有时我们可以看到回车键是“下一步”、“搜索”、“确认”等,那么这个效果要怎么做呢?其实很简单,我们只需要在EditText中设置imeOptions这个属性就行了。 <EditText android:layout_width="match_parent" android:layout_height=...原创 2016-06-05 14:14:24 · 13556 阅读 · 0 评论 -
Android圆形头像。简单实用零依赖
一、前言记不得是从哪儿看到的这个类了,反正用起来挺方便的。在这里简单的示范一下使用 二、代码import android.content.Context;import android.content.res.TypedArray;import android.graphics.Bitmap;import android.graphics.BitmapShader;impo...转载 2016-05-26 22:00:58 · 849 阅读 · 0 评论