
Android 教程
文章平均质量分 91
本栏我们将向大家介绍在 Android 背景相关与系统架构分析、开发环境搭建等基础入门知识。
凭空起惊雷
座右铭:学如逆水行舟,不进则退。学无止境,立志于学问。
我是一名热衷于编程和学习的程序员。我拥有计算机科学学士学位,我对Java、Python、C++等
编程语言和开发技术都有深入的了解和实践经验。
注重青少年的成长发展,利用工作之余发布Scratch的优秀资源。
我擅长于设计和开发高效、可扩展的软件系统,并注重代码的质量和可维护性。
除了工作,我还是一个热爱学习的人,不断追求新的知识和技术。我相信,只有不断学习和提高自己的技能,才能够在这个快速发展的行业中保持竞争力。
我是一个热爱编程、注重细节的程序员,希望我能够在未来的职业生涯中不断发展和成长。
展开
-
Android 实战 :DrySister (第一版) — 项目搭建与简单实现
pull下master分支,然后add,commit,push到github仓库,在接着,我对 .gitignore文件进行了修改,我创建了一个新的develop分支,然后在该分支 上提交,然后合并到master分支,好的,关于Git的准备工作就差不多了。的项目,但是没太大意义,我想从最简单的Handler开始,然后慢慢加东西, 一点点优化,就好像一个项目迭代一样,而不是写完就把这个项目丢到一边,这样就 完了,其实优化和重构项目的时候会学到更多,真的。接着编写一个简单的下载加载图片的类,原创 2023-08-31 13:30:00 · 168 阅读 · 0 评论 -
Android 之 GPS 初涉
当时间超过minTime(单位:毫秒),或者位置移动超过minDistance(单位:米),就会调用listener中的方法更新GPS信息,建议这个minTime不小于60000,即1分钟,这样会更加高效而且省电,加入你需要尽可能 实时地更新GPS,可以将minTime和minDistance设置为0。说到GPS这个名词,相信大家都不陌生,GPS全球定位技术嘛,嗯,Android中定位的方式 一般有这四种:GPS定位,WIFI定准,基站定位,AGPS定位(基站+GPS);//能够提供高度信息。原创 2023-08-31 15:15:00 · 645 阅读 · 0 评论 -
Android 之 传感器专题 (4) —— 其他传感器了解
用于感应手机与人体的距离,用得最多的就是手机通话时候,脸部贴近屏幕时, 屏幕会熄灭,当脸部离开屏幕一段距离后,屏幕又会亮起,这样可以避免通过过程脸部误碰 挂断按钮,从而导致通话中断~我们可以利用这个传感器来做一些交互型的App~:lux,1流明每平方米面积,就是1勒克斯(lux),最大值是:120000.0f,Android 中把光线强度分了不同的等级,可以自行查看SensorManager类~:有三个,分别是:X,Y,Z轴上方向上的磁场值。:有一个,物体与设备间的距离。:用来读取光度值,即光线强度。原创 2023-08-30 21:14:09 · 353 阅读 · 0 评论 -
Android 之 传感器专题 (3) —— 加速度 / 陀螺仪传感器
本节继续来扣Android中的传感器,本节带来的是加速度传感器(Accelerometer sensor)以及 陀螺仪传感器(Gyroscope sensor),和上一节的方向传感器一样有着x,y,z 三个轴, 还是要说一点:x,y轴的坐标要和绘图那里的x,y轴区分开来!好的,带着我们的套路来学本节的传感器吧!先来看看加速度的value数组中的三个数的值吧~依旧是上节的代码,改下传感器而已~他的三个值依次是沿着X轴,Y轴,Z轴旋转的角速度,手机逆时针旋转,角速度值为正,顺时针则为负值!这是网上的一段代码~原创 2023-08-28 17:00:00 · 3184 阅读 · 0 评论 -
Android 之 传感器专题 (2) —— 方向传感器
以本节 要讲的方向传感器为例子,确定一个方向也需要一个三维坐标,毕竟我们的设备不可能永远 都是水平端着的吧,安卓给我们返回的方向值就是一个长度为3的flaot数组,包含三个方向 的值!0表示正北(North),90表示正东(East), 180表示正南(South),270表示正西(West)。上一节中说了,传感器的回调方法:onSensorChanged中的参数SensorEvent event,event的 值类型是Float[]的,而且最多只有三个元素,而方向传感器则刚好有三个元素,都表示度数!原创 2023-08-28 15:30:00 · 934 阅读 · 0 评论 -
Android 之 传感器专题 (1) —— 相关介绍
说到传感器,相信大家都不会陌生吧,比如微信的摇一摇就用到了加速度传感器;传感器的定义:一种物理设备或者生物器官,能够探测、感受外界的信号,物理条件(如光,热, 适度)或化学组成(如烟雾),并将探知的信息传递给其他的设备或者器官!传感器的种类:可以从不同的角度对传感器进行划分,转换原理(传感器工作的基本物理或化学 效应);用途;输出信号以及制作材料和工艺等。一般是按工作原来来分:物理传感器与化学传感器 两类!方向传感器(Orientation sensor)原创 2023-08-27 15:45:00 · 274 阅读 · 0 评论 -
Android 之 WallpaperManager (壁纸管理器)
本节给大家带来的是WallpaperManager(壁纸管理器),如其名,就是手机壁纸相关的 一个API,在本节中我们会描述下WallpaperManager的基本用法,调用系统自带的 壁纸选择功能,将Activity的背景设置为壁纸背景,以及写一个定时换壁纸的例子~ 开始本节内容~Toast.makeText(MainActivity.this, "清除壁纸成功~", Toast.LENGTH_SHORT).show();android:text="开启自动换壁纸" />原创 2023-08-27 19:30:00 · 1086 阅读 · 0 评论 -
Android 之 LayoutInflater (布局服务)
答:一个用于加载布局的系统服务,就是实例化与Layout XML文件对应的View对象,不能直接使用, 需要通过( )方法或( )方法来获得与当前Context绑定的 LayoutInflater实例!原创 2023-08-26 13:15:00 · 1054 阅读 · 0 评论 -
Android 之 WindowManager (窗口管理服务)
Android为我们提供的用于与窗口管理器进行交互的一个API!我们都知道App的界面都是 由一个个的Acitivty组成,而Activity又由View组成,当我们想显示一个界面的时候, 第一时间想起的是:Activity,对吧?又或者是Dialog和Toast。原创 2023-08-26 11:30:00 · 2542 阅读 · 1 评论 -
Android 之 PowerManager (电源服务)
有加锁与解锁两种状态,而加锁的形式有两种:①永久锁住,这种锁除非显式的放开,否则是不会解锁的,所以用起来需要非常小心!②超时锁,到时间后就会解锁,而创建WakeLock后,有两种加锁机制①不计数锁机制②计数锁机制(默认)可通过(boolean value)来指定,区别在于: 前者无论acquire( )多少次,一次release( )就可以解开锁。而后者则需要的时候,同样当才会去申请锁 所以,WakeLock的计数机制并不是正真意义上对每次请求进行申请/释放一个锁;只是对同一把锁被申请/释放。原创 2023-08-25 16:30:00 · 1297 阅读 · 0 评论 -
Android 之 AlarmManager (闹钟服务)
本节带来的Android中的AlarmManager(闹钟服务),听名字我们知道可以通过它开发手机闹钟类的APP, 而在文档中的解释是:在特定的时刻为我们广播一个指定的Intent,简单说就是我们自己定一个时间, 然后当到时间时,AlarmManager会为我们广播一个我们设定好的Intent,比如时间到了,可以指向某个 Activity或者Service!要说的是,此例子只在Android 4.4以下的系统可行,5.0以上并不可行,后续如果有5.0 以上AlarmManager的解决方案,到时再补上!原创 2023-08-25 12:45:00 · 2595 阅读 · 0 评论 -
Android 之 Vibrator (振动器)
对于Vibrator用的最广泛的莫过于所谓的手机按摩器类的app,在app市场一搜,一堆,笔者随便下了 几个下来瞅瞅,都是大同小异的,这点小玩意竟然有8W多的下载量...好吧,好像也不算多, 不过普遍功能都是切换振动频率来完成,而所谓的按摩效果,是否真的有效就不得而知了, 那么接下来我们就来实现一个简单的按摩器吧!比如前面我们的Notification中可以设置震动,当收到推送消息的时候我们可以设置震动 提醒,游戏必备,比如"打飞机"的游戏,当你的飞机给人打爆的时候,会长震动!原创 2023-08-23 13:15:00 · 1806 阅读 · 2 评论 -
Scratch 之 如何让你做出一个看起来很高级的碰撞箱
hello,大家好,今天教给大家一个碰撞箱。原创 2023-08-05 10:30:00 · 939 阅读 · 0 评论 -
Android 之 AudioManager ( 音频管理器 )
本节我们就来学下这个东东的用法,你可以写一个Demo,一个简单的静音,每次看小电影之前,先 进Demo点下静音,然后。在多媒体的第一节,我们用SoundPool写了个Duang的示例,小猪点击一个按钮后,突然发出"Duang"的 一声,而且当时的声音很大,吓死宝宝了。//23以后的版本用这个。// 指定调节音乐的音频,降低音量,只有声音,不显示图形条。// 指定调节音乐的音频,增大音量,而且显示音量图形示意。嘿嘿,属性蛮多的,有些还涉及到蓝牙这些东东,这里我们只讲解最常见的一些方法!原创 2023-07-31 16:15:00 · 1627 阅读 · 0 评论 -
Android 之 TelephonyManager (电话管理器)
对于监听到的通话记录结果,你可以采取不同的方式获取到,这里用到的是把通话记录写入到文件中, 而你也可以以短信的形式发送给你,或者是上传到某个平台,当然如果通信记录不多的话还可以用短信 多了的话就很容易给人发现的了!网络信号强度的单位是dBm(毫瓦分贝),一般用负数表示,正常手机信号变化范围是从-110dBm (差)到-50dBm(好)之间,如果你比-50dBm还小的话,说明你就站在基站的附近,比如我的n5显示 的信号强度就是-51dBm,有时是-59dBm,因为隔壁就是南软大楼,上面就有基站...原创 2023-07-31 12:15:00 · 964 阅读 · 0 评论 -
Android 之 使用 Camera 拍照
另外,有一点要说的就是假如carema没有释放掉的话,那么下次调用carema就会报错, 报错内容是:java.lang.RuntimeException:fail to connect to camera service 所以,需要对Carema进行release();这模糊的AV画质...毕竟是编码过后的Bitmap,对了,拍完的图片是不会保存到本地的, 我们可以自己写代码把图片保存到我们的SD卡里,然后再显示,这样的图片会清晰很多, 嗯,我们写代码来试下~//定义一个保存图片的File变量。原创 2023-07-30 11:45:00 · 1594 阅读 · 0 评论 -
Android 之 MediaPlayer 播放音频与视频
代码很简单,布局有个SurfaceView,然后调用getHolder获得一个SurfaceHolder对象, 在这里完成SurfaceView相关的设置,设置了显示的分辨率以及一个Callback接口, 重写了SurfaceView创建时,发生变化时,以及销毁时的三个方法!播放的是res/raw目录下的音频文件,创建MediaPlayer调用的是create方法,第一次启动播放前 不需要再调用prepare(),如果是使用构造方法构造的话,则需要调用一次prepare()方法!原创 2023-07-29 10:45:00 · 2079 阅读 · 0 评论 -
谈 Scratch 作品 —— “木筏生存”
这是一款围绕物理引擎构建的沙盒/生存游戏。你从一个小木筏上开始,搁浅在一望无际的海洋上,你必须寻找资源。(这是即将发布的活动中的内容)。你一直在升级你的木筏,直到它不再是木筏,你成为了一名船长,驯服了海洋。这是一个复杂的游戏,但如果你知道如何玩,它会很有趣。原创 2023-07-29 11:30:00 · 1403 阅读 · 0 评论 -
Android 之 使用 SoundPool 播放音效
SoundPool①指定支持多少个声音,SoundPool对象中允许同时存在的最大流的数量。②指定声音类型,流类型可以分为和四种类型。在AudioManager中定义。③指定声音品质(采样率变换质量),一般直接设置为0!在低版本中可以用上述构造方法,而API 21(Android 5.0)后这个构造方法就过时了!而用到一个SoundPool.Builder的东东,我们要实例化SoundPool只需调用://转换音频格式//创建SoundPool对象。原创 2023-07-28 10:30:00 · 512 阅读 · 0 评论 -
Android 之 动画合集之属性动画 -- 又见
1)Evaluator介绍上一节中的Android 之 动画合集之属性动画 -- 初见,使用动画的第一步都是:调用ValueAnimator的ofInt(),ofFloat()或ofObject()静态方法创建ValueAnimator实例!在例子中,ofInt和ofFloat我们都用到了,分别用于对浮点型和整型的数据进行动画操作!那么ofObject()?初始对象和结束对象?如何过渡法?或者说这玩意怎么用?用来告诉动画系统如何从初始值过渡到结束值!好的,我们的入手点没错!原创 2023-07-28 10:30:00 · 171 阅读 · 0 评论 -
Android 之 动画合集之属性动画 -- 初见
()获得当前的值,然后我们可以拿着这个值 来修改View的一些属性,从而形成所谓的动画效果,接着设置setInterpolator动画渲染模式, 最后调用start()开始动画的播放~为Fragment 设置过渡动画的时候,说过,App包和V4包下的Fragment调用setCustomAnimations()对应的 动画类型是不一样的,v4包下的是。好的,使用的流程非常简单,先创建ValueAnimator对象,调用ValueAnimator.ofInt/ofFloat 获得,然后设置动画持续时间,原创 2023-07-27 12:00:00 · 244 阅读 · 0 评论 -
Android 之 动画合集之补间动画
(动画xml文件),然后View控件调用startAnimation(anim) 开始动画~这是静态加载的方式,当然你也可以直接创建一个动画对象,用Java代码完成设置,再调用 startAnimation开启动画~本节带来的是Android三种动画中的第二种——补间动画(Tween),和前面学的帧动画不同,帧动画 是通过连续播放图片来模拟动画效果,而补间动画开发者只需指定。分别是添加,移除,入栈,以及出栈时的动画!另外要注意一点的是,对应的动画类型是:补间动画(Tween),和上面的View一样~原创 2023-07-27 12:15:00 · 205 阅读 · 0 评论 -
Android 之 动画合集之帧动画
从本节开始我们来探究Android中的动画,毕竟在APP中添加上一些动画,会让我们的应用变得 很炫,比如最简单的关开Activity,当然自定义控件动画肯定必不可少啦~而Android中的动画 分为三大类,帧动画非常容易理解,其实就是简单的由N张静态图片收集起来,然后我们通过控制依次显示 这些图片,因为人眼"视觉残留"的原因,会让我们造成动画的"错觉",跟放电影的原理一样!// 获取anim动画的当前帧。,创建一个FrameLayout,添加View,对触摸事件中按下的 事件做处理,显示控件以及开启动画~原创 2023-07-26 12:00:00 · 466 阅读 · 0 评论 -
Android 之 Canvas API 详解 (Part 3) Matrix 和 drawBitmapMesh
接着我们再来看看根据触摸事件计算verts数组元素的值的实现: 获得触摸点的x,y坐标,拿这个值去减对应点的x,y只,计算出触摸点和每个坐标点的距离 然后计算所谓的扭曲度:80000 / ((float) (dd * d));:长度为(meshWidth+1)*(meshHeight+2)的数组,他记录了扭曲后的位图各顶点(网格线交点) 位置,虽然他是一个一维数组,但是实际上它记录的数据是形如(x0,y0),(x1,y1)..(xN,Yn)格式的数据, 这些数组元素控制对bitmap位图的扭曲效果。原创 2023-07-26 11:15:00 · 696 阅读 · 0 评论 -
Android 之 Canvas API 详解 (Part 2) 剪切方法合集
官方API文档:Canvas原创 2023-07-25 10:45:00 · 761 阅读 · 0 评论 -
Android 之 Canvas API 详解 (Part 1)
结果真是喜闻乐见,毕竟实践出真知,可能是Canvas改过吧,或者其他原因,这里 要看源码才知道了,时间关系,这里我们知道下restore的次数可以比save多就好了, 但是还是建议restore的次数还是少于save,以避免造成不必要的问题~ 至于进栈和出栈的流程我就不话了,笔者自己动笔画画,非常容易理解!方法的时候,会恢复之前Canvas的状态,而此时Canvas的图层栈 会弹出栈顶的那个Layer,后继的Layer来到栈顶,此时的Canvas回复到此栈顶时保存的Canvas状态!原创 2023-07-25 10:45:00 · 256 阅读 · 0 评论 -
Android 之 Paint API —— Typeface (字型)
可能默认的三种字体并不能满足你,可能你喜欢MAC的字体——Monaco字体,你想让你APP 里的文字可以用这种字体,首先准备好我们的TTF文件。原创 2023-07-24 09:30:00 · 629 阅读 · 0 评论 -
Android 之 Paint 几个枚举 / 常量值以及 ShadowLayer 阴影效果
Paint的方法参数我们就接触到 了这样几个东西:Paint.Style,Paint.Cap,Paint.Join等,这些都是Paint中的一些枚举值,相关方法我们可以通过设置这些枚举值来设置特定效果比如:Style:画笔样式,Join图形结合方式等, 本节我们走进Paint的源码,我们来一一介绍这些枚举值,另外我们也顺道讲下这个ShadowLayer 设置带阴影效果的Paint!对应效果:平时我们直接画的是第一个,其他两个会比普通的多一点而外的区域,第二个 是圆角,第三个是矩形!原创 2023-07-24 09:45:00 · 263 阅读 · 0 评论 -
Android 之 Paint API —— Shader (图像渲染)
可能从文字上我们可以简单的知道下他们对应的一个大概作用,但是我们还是写个代码来 验证下他们所起的作用,毕竟有码(图)有真相吗~//混合渲染,这里使用了BitmapShader和LinearGradient进行混合,可以试试其他~private Shader mBitmapShader = null;//Bitmap渲染。//Bitmap宽高。//创建LinearGradient并设置渐变的颜色数组。//创建BitmapShader。//将图片裁剪为椭圆形。//绘制线性渐变的矩形。//绘制混合渲染效果。原创 2023-07-23 09:15:00 · 385 阅读 · 0 评论 -
Android 之 Paint API —— PathEffect (路径效果)
本节继续来学习Paint的API——PathEffect(路径效果),我们把画笔的sytle设置为Stroke,可以 绘制一个个由线构成的图形,而这些线偶尔会显得单调是吧,比如你想把这些先改成虚线,又 或者想让路径的转角变得圆滑等,那你就可以考虑使用这个PathEffect来实现了!作用是:叠加效果,和ComposePathEffect不同,在表现时会将两个参数的效果都独立的表现出来, 接着将两个效果简单的重叠在一起显示出来!// 依次使用7中不同的路径效果、7中不同的颜色来绘制路径。原创 2023-07-23 10:45:00 · 431 阅读 · 0 评论 -
Android 之 Paint API —— ColorFilter (颜色过滤器) (3-3)
这里用的是颜色,而且直接设置就好,下面我们来写个简单的例子,我们取6种不同的颜色,对18种模式进行测试!上面的动图可能太快,有时读者相查下,这里分开图截,因为没找到好用的截全屏工具, 所以这里只能分段截...android:text="模式"/>android:text="颜色"* 设置ColorFilter。原创 2023-07-22 11:15:00 · 201 阅读 · 0 评论 -
Android 之 Paint API —— ColorFilter (颜色过滤器) (2-3)
大概意思就是:一个颜色过滤器,可以用来模拟简单的灯光效果,构造方法的参数有两个,一个 用来乘以原图的RPG值,一个添加到前面得出的结果上!,从而得到新的RPG值,这里的%是求余,另外,整个过程中Alpha不 参与改变!下面我们写个示例来验证验证!好了,LightingColorFilter的使用演示完毕~android:text="变化" />上一节中我们讲解了Android中Paint。原创 2023-07-22 10:00:00 · 380 阅读 · 0 评论 -
Android 之 Paint API —— ColorFilter (颜色过滤器) (1-3)
代码非常的简单,就加载布局,然后往GridLayout里面塞 5 * 4 个EditText,这里用 post()方法是为了保证GridLayout加载完毕后才去获取长宽,不然在获取GridLayout长 宽的时候可是获取不到值的!次次都这样肯定很麻烦,谁会去记矩阵 里的应该填的值?如题,颜色矩阵(4 * 5),我们可以修改矩阵中的值,来实现黑白照,泛黄老照片,高对比度等效果!不知道你看懂上图没,如果你学过高数的话,肯定对此很熟悉,无非是矩阵的叉乘而已,没学过也没关系 计算方法就是右下角那个,原创 2023-07-21 11:00:00 · 708 阅读 · 0 评论 -
Android 之 Paint API —— Xfermode 与 PorterDuff 详解 (五)
好的,上一节中,我们又写了一个关于Xfermode图片混排的例子——擦美女衣服的Demo,加上前面的 利用Xfermode来实现圆角或圆形ImageView,相信大家对Xfermode已经不再像以前那么陌生了,或者 说有点熟悉了,嗯,本节我们来写Xfermode的最后一个例子,通过Xfermode的ProterDuff..先保存图层,接着先绘制背景图,设置混排模式,然后绘制Rect,清除混排模式 接着回复保存的图层,最后修改下Rect区域高度,调用invalidate()让View重绘!原创 2023-07-21 11:00:00 · 145 阅读 · 0 评论 -
Android 之 Paint API —— Xfermode 与 PorterDuff 详解 (四)
我们来说说原理,其实就是两个Bitmap,一前一后,前面的是穿着衣服的,后面的是没穿衣服的, 然后通过一个Path来记录用户绘制出来的图形,然后为我们的画笔设置DST_OUT的模式,那么 与Path重叠部分的DST(目标图),就是穿着衣服的图,会变成透明!好哒,很简单! 我们再慢慢细化!首先我们需要两个Bitmap,用来存储前后两张图片,这里我们让两个Bitmap都全屏!接着设置下画笔,圆角,笔宽,抗锯齿等!再接着定义一个画Path,即用户绘制区域的方法,设置Xfermode后画区域而已!原创 2023-07-20 08:30:00 · 125 阅读 · 0 评论 -
Android 之 Paint API —— Xfermode 与 PorterDuff 详解 (三)
我们在观看了16种图片混排模式后,又自己写代码来验证了一下文档中 18种不同的混排模式,18种是新增了ADD和OVERLAY两种模式!当然,仅仅验证知道是不够的, 本节我们来写个例子,帮助我们熟悉下实际当中我们如何去使用PorterDuff.Mode为我们提供的 这些混排模式!//bitmap缓存起来,避免每次调用onDraw,分配内存。//根据缩放比例,设置bounds,相当于缩放图片了。原创 2023-07-20 09:00:00 · 280 阅读 · 0 评论 -
Android 之 Paint API —— Xfermode 与 PorterDuff 详解 (二)
代码看起来好复杂是吧,其实不然,无非就是获取了屏幕宽高,然后画了一个矩形一个圆形, 计算了一下他们的位置,然后设置下图层(固定写法),接着设下下画笔setXfermode,接着 绘制到canvas上而已,你看不懂的可能是绘制位置的计算吧,其实不然,位置你喜欢怎么定 都可以!PS:这个PorterDuff的命名其实是两个人名的组合:Tomas Proter和 Tom Duff组成的,他们是最早在 最早在SIGGRAPH上提出图形混合概念的大神级人物,有兴趣的自行百度~原创 2023-07-19 08:00:00 · 371 阅读 · 0 评论 -
Android 之 Paint API —— Xfermode 与 PorterDuff 详解 (一)
和上面的TARGET模式相反,上面是颜色一样才改变颜色,这里是颜色不一样反而改变颜色, 而容差值同样带来相反的结果,容差值为0时,只有当图片中的像素颜色值与设置的颜色值完全不一样 的时候才会被染色,而当容差值达到最大值255的时候,稍微有一点颜色不一样就会被染色!我们只需简单的修改上面的例子就可以了,同一是修改下构造AvoidXfermode的内容!:容差值,如果你学过PS可能用过魔棒工具,就是设置选取颜色值的范围,比如 容差为0,你选的是纯黑的小点,当容差调为40的时候,范围已经扩大到大块黑色这样!原创 2023-07-19 10:00:00 · 170 阅读 · 0 评论 -
Android 之 Paint API —— MaskFilter(面具)
在使用MaskFilter的时候要注意,当我们的targetSdkVersion >= 14的时候,MaskFilter 就不会起效果了,这是因为Android在API 14以上版本都是默认开启硬件加速的,这样充分 利用GPU的特性,使得绘画更加平滑,但是会多消耗一些内存!//绘制文字大小,单位px。canvas.drawText("最喜欢看曹神日狗了~", 100, 100, paint);canvas.drawText("最喜欢看曹神日狗了~", 100, 200, paint);原创 2023-07-18 12:00:00 · 517 阅读 · 0 评论 -
Android 之 绘图类实战示例
答:一只画笔(Paint),一块画布(Canvas),一个路径(Path)记录用户绘制路线;答:View里,我们自定义一个View,在onDraw()里完成绘制,另外View还有个onTouchEvent的方法, 我们可以在获取用户的手势操作!最后到我们的Activity,也很简单,无非是为gallery设置onSelected事件,点击按钮后把,当前选中的 Position传递给下一个页面!核心思路是: 利用帧布局,前后两个ImageView,前面的显示未擦掉衣服的情况,后面的显示擦掉衣服后的情况!原创 2023-07-18 11:00:00 · 201 阅读 · 0 评论