
JAVA
henono
这个作者很懒,什么都没留下…
展开
-
Android 深拷贝 (clone方法实现)
Android 深拷贝 (clone方法实现)原创 2023-03-23 12:30:45 · 972 阅读 · 0 评论 -
Android 短信sms倒计时
将sms倒计时封装在一个类中:public class SmsTimer { private Timer timer; private int totalTime=60; //总共时长 private int currentTime; //当前倒计时 private Handler handler=new Handler(Looper.getMainLooper()); public SmsTimer(TimerInterface timerInter原创 2021-06-16 10:05:19 · 236 阅读 · 0 评论 -
解决Android project already contains module with this name
第一步:选择File -> Project Structure -> Modules,选中要删除的module并点击减号第二步:选择File -> Project Structure -> Dependencies,选中app,将需要删除的mudule取消关联第三步:检查setting.gradle文件,include这一行是否还存在已删除的module,如果存在就手动删除第四步:检查项目文件夹下面是否仍存在已经删除的module的文件夹,如果存在就手动删除原创 2020-09-09 11:18:59 · 4418 阅读 · 1 评论 -
Android 自定义LinearLayout实现滑动下拉抽屉的功能(解决滑动冲突)
本篇我们来解决上一篇的遗留问题:自定义LinearLayout与RecyclerView的滑动冲突。没看过上一篇文章的,可以先去看一下:https://blog.youkuaiyun.com/zz51233273/article/details/108320445先看效果图:一、解决思路当手指一开始滑动时,触摸事件会被传递给RecyclerView去处理。并且在滑动列表数据的时候,我们确实是想让RecyclerView去处理触摸事件。经过长时间尝试,我发现用onInterceptTouchEvent原创 2020-09-02 10:11:15 · 1142 阅读 · 0 评论 -
Android 自定义LinearLayout实现滑动下拉抽屉的功能
先看效果图:先来说说思路:我们把该页面分为两部分,分别是头部的抽屉布局(海洋色背景)和主内容布局(白色背景),这两部分的布局是呈线性关系,即抽屉在上,主页面在下,并且它们的父布局应该是一个可滑动的LinearLayout线性布局所以,我们的目标就是自定义一个可滑动的LinearLayout,并且设置它的子布局都向上移动一个自定义LinearLayout的高度一、自定义控件的测量和布局自定义LinearLayout,假设为MyPullDownLayout:public class M原创 2020-08-31 15:17:10 · 3197 阅读 · 0 评论 -
Android 自定义View一个酷炫又无厘头的动画
先看效果图:这是我在做上一篇自定义View加载动画时,无意间写出来的东西,个人觉得十分酷炫,而且只需要简简单单40行代码。关于该View的实现我不细说了,直接上代码:public class MyFiveCircleView extends View { private Paint circlePaint; private RadialGradient radialGradient; private int circleNum=5; //圆的数量原创 2020-08-27 11:33:27 · 347 阅读 · 0 评论 -
Android 自定义View利用Path实现变速圆周运动的环绕加载动画
先看效果图:我先来说下思路:首先我们需要将小圆球添加到Path中(Path.addCircle()),然后我们利用canvas.rotate旋转整个图层,从而实现小球绕图层中心做圆周运动。又因为每个圆球运动轨迹不同,所以我们需要五个Path对象来分别存放上图中的五个圆球。最后利用加速度公式来模拟小球加速和减速运动一、圆球的绘制和匀速圆周运动下面我们来做图分析:由上图可知,以我们控件的宽度为准,假设控件的宽度为w,可以设计最大圆的半径为w/8,接下来从大到小其余四个圆的半径分别为w/.原创 2020-08-27 11:03:33 · 1296 阅读 · 0 评论 -
自定义View实现圆环环绕的加载动画
先看效果图:这是我在某软件上看到的加载动画,感觉挺不错,就自己研究了一下。下面给大家分享一下该动画的实现过程一、三个圆环的绘制和运动分析来看下面这张解析图:假设每个圆环的初始位置如上图,那么我们可以设定每一个球的位置以及每一个球离控件边界的距离(w/6)为了方便,我们定义控件宽度getWidth()为w,那么左上,右上,正下方圆环的圆心坐标依次为:(w/4, w/4),(w*3/4, w/4),(w/2, w*3/4)我们再来看下面这个动画:发现了吧,实际上每个圆原创 2020-08-24 15:38:58 · 459 阅读 · 0 评论 -
自定义View实现注销图案的加载动画
先看效果图:有那味了。。。(懂得都懂^ ^ √)我们先来分析一下怎么画,然后再研究怎么让他动起来这个View是由内部的注销图案和外面一圈圆环构成。而内部的注销图案又是由一个基本满角度的圆弧和一根竖线组成一、绘制内部注销图案首先初始化画笔和圆弧的外切矩形:private Paint logOffPaint; //注销图案的画笔private Paint circlePaint; //外圆的画笔private RectF logOffRect; //注销图案中圆弧的外切原创 2020-08-21 18:14:17 · 210 阅读 · 0 评论 -
Android 自定义ViewGroup实现图片滑动显示
先看效果图:本篇我们分为三部分来讲:图片的滑动实现 动态改变缩放值和透明度 实现右下角滚轮滑动 补充一、图片的滑动实现在上图中,一个屏幕里同时可以存在三张图片,这意味着每次滑动实际只滑动了1/3的屏幕宽度。当然,我们也可以只让屏幕显示一张图片,或是同时显示5张等等。我们应该设立一个变量onPagerNum来表示当前屏幕显示的图片数量在本文中我们令onPagerNum=3,即一个屏幕出现三张图片。下面我们要计算每个图片应分配的最大宽度,先来看下图:从图中就能很明显的得出结论原创 2020-08-10 16:32:02 · 1765 阅读 · 2 评论 -
Android 自定义View贝塞尔曲线实现波浪动画
先看效果图:下面我们来研究研究他是如何实现的。为了方便我们观察,再来看下面这张动图:有感受到些什么吗?其实,我们需要做的是同时创建多条贝塞尔曲线,然后移动每条曲线上的起点和终点就能实现波浪效果了。例如在上面图中,黑色的点是贝塞尔曲线上的起点与终点,蓝色的点是贝塞尔曲线的控制点。控制点x的坐标其实是由起点和终点决定的。控制点x坐标计算公式是:x=(起点的x+终点的x)/2,控制点y的坐标我们可以任意取值,从而来达到最好的效果。所以,移动贝塞尔曲线的起点和终点后,它的控制点也会跟着移动。原创 2020-08-07 17:54:01 · 821 阅读 · 0 评论 -
Android 自定义View贝塞尔曲线实现书籍翻页的效果(包含原理解释)
先看效果图:我先来解释一下该翻页的实现原理,大家来看下面这张图:我们可以把翻页时的图案分为三部分,分别是第一页的图案,第一页的背面图案,以及第二页的图案。我们将图形进一步数学化:其中,c、d、b是以e为控制点的贝塞尔曲线上的点。同样,j、i、k是以h为控制点的贝塞尔曲线上的点。a为翻角的顶点,线段eh为线段af的中垂线。根据上图,我们可以对线段af左侧做出假设(另一边也同理):ce=ef/2p是线段cb的中点d是线段pe的中点b是ae和cj的交点由原创 2020-08-05 14:52:47 · 2173 阅读 · 3 评论 -
Android 自定义View实现动画效果切换主题颜色
先看效果图:想要实现这种效果,首先要了解下Xfermode图像混合模式中的PorterDuff.Mode.CLEAR,它可以用来清除原图像的部分绘制内容,可以理解为它是一块橡皮,可以擦去图像上的任意一块地方。其次,canvas中的也有着图层的概念。图层是什么,简单来说就是一层一层的图片叠加在同一个地方,比如有一幢摩天大楼,它有一层,两层,三层......十八层等等,我们如果从大楼正上方俯瞰大楼,因为它的下面几层都被最上层压住了,所以我们只能看到它的最上层。图层的概念也一样,我们正常情况只能看到最原创 2020-07-31 15:55:03 · 807 阅读 · 0 评论 -
Android 自定义View实现打钩(签到)的动画
先看效果图:这里,我没有添加打钩的图片,而是单纯的用canvas来实现动画效果中间的钩,我用了路径Path来进行描绘并实现它的动画效果。首先,这个钩由两条线段,三个顶点组成的,其实将这三个顶点作为参数传入Path对象中的lineTo()方法,再调用一下canvas.drawPath(),我们就可以得到图中这个钩的样式了然后说说动画效果的实现,postInvalidateDelay()这个方法就很重要了,它能让onDraw()方法每隔一段时间被调用一次所以,外部的圆环我们可以用drawAr原创 2020-07-29 17:46:49 · 998 阅读 · 0 评论 -
Android 自定义View实现炮弹射击小游戏
先看效果图:这是一个比较简易的射击小游戏,后期可以将圆球,炮筒用其它图片来替换,应该可以变得好看一些。我实现这个效果,主要是为了学习和巩固自定义View的一些知识点。下面我来讲述一下本游戏的设计思路从图上我们可以看到,我们需要一个炮筒,炮筒里可以发出许多的子弹,然后天上有很多的敌人,我们需要用子弹去碰撞到敌人,从而达到消灭敌人的效果。所有我们首先就需要有炮筒,子弹,敌人这三个类大炮类:public class Artillery { private Matrix matrix;原创 2020-07-28 17:18:38 · 1456 阅读 · 4 评论 -
Android 自定义View实现可拖动边框缩放的矩形
先看效果图我的思路是,首先我给确定下来我点击的是哪一条边,这个可以用onTouchEvent来监听实现。然后,由于用户很难精确的点击到边上,所有点击时需要存在一定的误差范围。最后,我需要判断每条边的边界情况,例如右边框不能移动到左边框的左边,上边框不能移动到下边框的下面等。下面是自定义View的源码:public class MyRectView extends View { private Paint paint; private Rect rect; priva原创 2020-07-28 09:52:36 · 2400 阅读 · 6 评论 -
Android 自定义View实现圆形头像(适用于任意布局)
先看效果图:先来说下我的思路:首先我需要在自定义View中动态获取头像id,那么就需要在attrs文件中,写一个关于该View类的自定义属性。这里仿照ImageView,取名为src,类型为reference引用类型<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="CircleImageView"> <attr name="原创 2020-07-24 11:51:44 · 1120 阅读 · 1 评论 -
Android 自定义View实现动画形式加载环形图
先看效果图(图片是gif,比较卡顿):通过调用postInvalidateDelayed()延时绘制的方法,可以实现以上图片中的延时效果,下面来看具体代码:1、自定义View类:public class MyProgressView extends View { private Paint circlePaint; //圆环的画笔 private Paint bgPaint; //环背景的画笔 private RectF circleRectF; //原创 2020-07-16 10:41:50 · 449 阅读 · 0 评论 -
Android Zxing二维码自定义界面(继承Capture类)
先来看效果图首先我们引入Zing开源框架,来搭建二维码扫描环境:dependencies { implementation 'cn.yipianfengye.android:zxing-library:2.2'}跳转到二维码扫描界面://跳转到扫描二维码public void forwardZXing(){ Intent intent = new Intent(this, CaptureActivity.class); startActivityForRe原创 2020-07-13 15:31:04 · 3178 阅读 · 2 评论 -
自定义View简单实现图片的手指移动和两指缩放
先看效果图:直接上源码:自定义View类public class MyView extends View { private Matrix matrix; private Bitmap bitmap; private Paint paint; private float currentX,currentY; //当前手指所在屏幕的位置坐标 private double pointerDistance=-1; //两指间的距离 pri原创 2020-07-08 14:01:24 · 1375 阅读 · 0 评论 -
Android 解决Dialog导致软键盘无法隐藏的问题
解决办法:hideSoftInputFromWindow(view.getWindowToken(), 0);这个方法中的第一个参数传dialog的view例如:Dialog dialog = new Dialog(getContext(), R.style.ActionSheetDialogStyle);InputMethodManager imm=(InputMethodManager)getContext().getSystemService(Context.INPUT_METHO原创 2020-05-12 11:14:27 · 1413 阅读 · 0 评论 -
JAVA的引用类型
强引用:=软引用:SoftReference弱引用:WeakReference虚引用:PhantomReference对象的可及性:强可及对象:永远都不会被GC回收,除非OOM软可及对象:当系统内存不足的时候,被GC回收弱可及对象:当系统GC发现这个对象,就被回收虚可及对象:虚引用用来检测对象是否被回收引用队列(ReferenceQueue):弱引用,软引用...原创 2020-04-26 02:26:29 · 172 阅读 · 0 评论 -
设计模式之单例模式
单例模式定义:保证一个类只有一个实例,并且提供一个全局访问点场景:线程池,数据连接池实现方式:1.懒汉模式:只有使用的时候,才初始化。延迟加载//使用的时候才初始化//jvm 一个实例public class LazySingleton { private volatile static LazySingleton instance; //volatile防止CPU...原创 2020-04-26 00:09:21 · 193 阅读 · 0 评论