自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 收藏
  • 关注

原创 SharedPreferences

从上面的代码可以看出,在调用getString()的时候加锁了,如果在主线程调用,意味着主线程被锁,如果此时Sp对象还未被获取,那么只有等Sp对象获取之后才能释放锁,这里可能会造成阻塞。从上面代码可以看出commit()调用时,将内存中的Sp写入到磁盘,是个耗时操作,所以不要频繁的调用commit(),频繁的调用可能会导致ANR。如果写入时发生异常,那么在下次启动时,如果有备份文件,会把备份文件作为源文件,未成功的文件删掉。Sp在写入内容打磁盘时,会把原来的内容备份,写入成功后,会删掉备份内容。

2023-05-16 12:19:25 445

原创 InstantiationException异常

使用注解实例化对象的时候,用Class对象调用newInstance()获取实例的时候,因为产生Class对象的类,没有无参构造方法,会报出该异常,只要给产生Class对象的类添加无参构造就可以解决

2021-04-12 14:20:22 362

原创 Button中 英文字母默认大写

android:textAllCaps="false"

2020-11-30 11:04:31 369

原创 在AndroidManifest文件中,android:screenOrientation=“portrait“设置时有红色警告线的解决方法

在Application标签下添加 tool:ignore="LockedOrientationActivity"tools的引用是 xmlns:tool="http://schemas.android.com/tools"引用来源:https://blog.csdn.net/qq_31796651/article/details/105512236

2020-11-28 13:29:24 513

原创 获取View在ParentView的下标索引

int index = ParentView.indexOfChild(view);

2020-11-21 10:26:24 705

原创 手势之GestureDetector

GestureDetector主要是用作对手势(单击,双击,按下,抬起,移动等)的监听OnGestureListener是GestureDetector的内部接口,主要是对DOWN ,MOVE,UP事件的监听回调,主要有以下方法:boolean onDown(MotionEvent e); //按下事件的回调void onShowPress(MotionEvent e); //按下事件已经触发,但是移动和抬起事件尚未触发时调用,主要功能是提供可视化反馈给用户,让用户明白他们的行为已经作用在一个元素

2020-08-10 14:44:02 396

转载 No IDEA annotations attached to the JDK , some issues will not be found

从SVN check out 项目到本地之后 , android studio 突然出现这个问题1.关闭Android Studio2.前往 “C:\Users\UserName\.android”目录,删除“build-cache”3.前往“C:\Users\UserName\.AndroidStudio3.2\system”目录,删除以下目录“caches”“co...

2020-04-02 10:17:13 460

原创 插值器Interpolator

插值器是用来控制动画执行速率的常用插值器//AccelerateDecelerateInterpolator 开始和结束比较慢,中间比较快//AccelerateInterpolator 越来越快//LinearInterpolator 匀速执行//DecelerateInterpolator 越来越慢//AnticipateInterpolator 动画反方向后退,再执行//...

2020-03-25 16:26:40 451

原创 属性动画PropertyAnim

属性动画核心类ValueAnimator用法:ValueAnimator.ofInt();ValueAnimator.ofFloat()ValueAnimator.ofObject()ofInt和ofFloat的内部实现只是它们所用的插值器不同ValueAnimator anim = ValueAnimator.ofFloat(1.0f, 0.0f);anim.setDur...

2020-03-19 17:45:15 169

原创 animation之补间动画

补间动画设定初始值和终止值,由系统算法算出过渡值的动画补间动画与属性动画最大的不同在于补间动画的属性并不会真实作用在控件上补间动画有四种(位移 , 缩放 , 透明度,旋转),四种动画动可以用xml和code实现四种动画都有的公共属性属性名称 xml code 执行时间 android:duration="1000" animation.setD...

2020-02-28 17:59:14 636

原创 PopupWindow的setClippingEnabled()

需求是实现如下的效果下面是我的初始code实现View contentView = LayoutInflater.from(mContext).inflate(R.layout.popup_index_list, null, false);final PopupWindow window = new PopupWindow(contentView, MATCH_PARENT, M...

2020-02-27 13:23:01 2557

原创 animation之逐帧动画

逐帧动画的本质是让静态图片不断切换,给人视频的感觉android可以用xml和code 实现逐帧动画xml实现:在drawable文件夹下新建anim_live.xml文件内部实现如下:<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.andr...

2020-02-26 15:50:51 489

原创 android basic activity的四种启动模式

activity是存放在任务栈里,所以activity的启动模式也是activity往任务栈中存放的方式任务栈的概念app启动会自动产生一个栈,用户行为产生的每一个activity都存放在这个栈里,只有栈顶的activity才可以和用户交互,但是其他的activity并不会被销毁,任务栈会保存其他activity的状态,当需要退出app时,需要把任务栈中的所有activity都移除才能销毁...

2020-02-26 14:28:59 561

原创 Base64编解码

Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,一种基于64个可打印字符来表示二进制数据的方法Base64编码String data = Base64.encodeToString(bytes, Base64.DEFAULT);Base64解码byte[] b = Base64.decode(data , Base64.DEFAULT);编码方式设置...

2019-08-05 17:57:26 1083

原创 Base64转图片并存储本地相册

public void saveImageToPhotos(String data) { if (TextUtils.isEmpty(data)) //图像数据为空 return; OutputStream fos = null; try { //Base64解码 byte[] b = Base64.decode(data ...

2019-08-05 17:21:26 1123

原创 EventBus使用

EventBus主要用于组件之间的通信,由GreenRobot发布使用1) implementation 'org.greenrobot:eventbus:3.1.1'2)工具类public class EventBusUtils { public static void register(Object subcriber) { EventBus.get...

2019-07-25 17:13:44 121

原创 JobScheduler简单使用

JobScheduler任务分发器,将Service和常见BroadcastReceiver结合,可以实现简单的调用使用方法主要用到3个类JobInfo任务概要信息,主要封装有该任务的触发条件JobService 继承自Service,用来处理任务的JobScheduler任务调度,主要是启动服务,处理触发回调@RequiresApi(api = Build.VERSION_...

2019-07-25 15:00:53 933

原创 animator之用scale 动画作出3d翻转动画的效果

实现原理:两张图片交替在x轴或y轴做缩放动画private ScaleAnimation sato1=new ScaleAnimation(1, 0, 1, 1, Animation.RELATIVE_TO_PARENT, 0.5f, Animation.RELATIVE_TO_PARENT, 0.5f);private ScaleAnimation sato2=new ScaleAnim...

2019-07-18 09:35:32 396

原创 事件分发小记

事件分发指事件从产生到传递最后处理的过程手指分发的对象是Activity , ViewGroup ,View Activity接收到事件之后,ViewGroup传递事件,最后View消费事件因此事件分发过程实际上就是Activity,ViewGoup和View的分发过程事件分发的主要方法有三个dispatchTouchEvent()分发事件onInterceptTouchEve...

2019-07-06 14:17:09 159

原创 GreenDao之UNIQUE constraint failed

我的问题是Primary Key的类型是long类型, 无法将主键的初始值赋值为null,只需要将主键的类型改为Long即可.

2019-07-05 10:48:07 1089

原创 GreenDao集成

1)在Project的build.gradle文件中配置repositories { mavenCentral()}dependencies { classpath 'org.greenrobot:greendao-gradle-plugin:3.2.2'}2)在module的build.gradle中配置apply plugin: 'org.greenro...

2019-07-05 10:43:22 465

原创 android stuio 的快捷键

Ctrl + H 查看类的继承关系Alt + 7 查看类结构shift + Alt + ↑↓ 向上向下复制一行shift + F10 运行Ctrl + Y 删除一行Ctrl + F 当前类内findCtrl + D 向下复制一行Ctrl +G 前往当前类几行几列Ctrl +J 显示code templateCtrl +R replace...

2019-06-28 09:55:19 97

原创 反射小记

java 中的反射就是可以在程序运行中可以获取一个类的全部信息并且可以创建该类的对象,调用该类的成员变量和成员方法.常用API:Member:是一个接口,反映单个成员或构造的标识信息GenericDeclaration 是一个接口,改变java默认的访问控制检查AccessibleObject:是Field类,Method类和Constructor类的父类,将反射的对象标记为在使用...

2019-06-21 11:25:42 90

原创 Fragment的setVisibleToUser()和onHiddenChanged()

setVisibleToUser和Fragment的生命周期有关,在onCreateView()之前调用,因此该方法在ViewPager和Fragment连用的时候可以获取Fragment的显影状态.onHiddenChanged和Fragment的生命周期无关,在Fragment调用add(),hide()和show()方法的时候调用,因此该方法在用add(),hide()和show()方法...

2019-06-14 13:47:34 771

原创 bug日记(3)之Plugin with id 'com.github.dcendents.android-maven' not found

在我导入一个module 到项目后,该module 的build.gradle文件出现这个提示Plugin with id 'com.github.dcendents.android-maven' not found解决方式在项目的build.gradle文件中添加classpath 'com.github.dcendents:android-maven-gradle-plugi...

2019-05-06 11:11:44 104

原创 bug笔记(2)之Could not find com.android.tools.build:gradle:3.3.0.

Down a project from github , found this bug.solve method:buildscript { repositories { jcenter() //重点 maven { url 'https://maven.google.com' } }...

2019-05-06 09:22:32 346

原创 设计模式(5)只适配器模式

适配器模式是把一个类的接口转变成客户端需要的另一个接口有3中类型 类适配器,对象适配器和接口适配器主要角色有三个类:被适配类src适配输出接口des适配器adapter运用场景:将一个类转换成系统需要的另一个接口 (类适配器)统一的输出接口,不同的输入类型(对象适配器)想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的...

2019-05-05 11:00:58 96

原创 学习笔记(9)之自定义垂直滚动的引导页视图

这个控件主要是对scrollBy(),scrollTo(),getScrollX(),getScrollY(),VelocityTracker和Scroller这几个知识点的学习.public class VarticalViewPagerView extends ViewGroup { private Context mContext; private int mScre...

2019-04-30 14:24:58 102

原创 设计模式(4)之观察者模式

如果一个类发生变化,依赖于该类的若干类都会接到通知,并作出相应的相应观察者模式有两个角色,一个是观察者,一个是被观察者,被观察者内部维护一个观察者的集合,当被观察者发生变化,遍历该集合,通知所有观察者对象,然后观察者根据各自不同的需求做出不同的响应.代码实例://观察者基类public interface Observer { void update();}//观察...

2019-04-30 11:20:48 101

原创 学习笔记(8)之VelocityTracker

VelocityTracker是当滚动事件发生时,对滚动速率的监听器,可以获取一段时间内,发生的滚动所产生的像素点在x轴和y轴的偏移量使用过程是在初始化化时调用VelocityTracker.obtain()初始化VelocityTracker对象,在onTouchEvent中添加事件监听调用addMoveEvent(MotionEvent ev),然后调用computeCurrentVelo...

2019-04-29 11:23:26 604

原创 学习笔记(7)之Scroller

Scroller本身并不能滚动,如果要实现滚动,需要调用scrollBy()和scrollTo(),它本质上是对滚动轨迹的封装,根据时间差和差值器,计算滚动距离,在调用scrollTo()和scrollBy()完成滚动构造方法Scroller(Context context)Scroller(Context context, Interpolator interpolator)...

2019-04-29 10:42:58 133

原创 学习笔记(6)之scrollTo()和scrollBy()

scrollTo()方法的源码public void scrollTo(int x, int y) { if (mScrollX != x || mScrollY != y) { int oldX = mScrollX; int oldY = mScrollY; mScrollX = x; mScrollY = y; ...

2019-04-28 17:25:18 227

原创 学习笔记(5)之getScrollX()和getScrollY()

getScrollX()和getScrollY()获取的是控件内容相对于内容初始化时显示的位置的偏移量对getScrollX()来说,初始化显示时获取的值是0,如果控件内容向左偏移,返回正值,如果向右偏移,返回负值对getScrollY()来说, 向上偏移返回正值,向下偏移返回负值...

2019-04-28 15:01:12 501

原创 设计模式(3)之外观模式

外观模式为一个复杂的模块提供一个唯一的调用接口,降低了对象调用与具体实现之间的耦合性核心封装交互,简化调用需求环境如果一个子系统中有多个不同的模块 ,client需要通过组合这些不同的模块来实现某一个具体的需求,那么可以穿件一个facade类,这个类持有不同模块的对象,可以在facade类中组合不同的模块来实现不同的需求,这样client就不用处理组合的步骤了,这样就降低了调用...

2019-03-05 14:29:13 110

原创 设计模式(2)之模板方法模式

模板方法在基类中定义算法框架,将不可变部分算法,放到基类中,将可变部分算法延迟到子类中实现,使子类在不改变算法结构的前提下,完成自己的特殊部分算法注意点:为了保证算法结构不被子类改变,要在定义算法结构的方法上加final修饰符自我理解抽离算法结构,具体算法延时实现需求场景算法步骤相同,但每步的具体实现不同代码模板:/** * 人的模板类 */public abs...

2019-03-04 11:33:26 114

原创 bug笔记(1)之Static interface methods are only supported starting with Android N

错误日志:Static interface methods are only supported starting with Android N (--min-api 24): okhttp3.Request okhttp3.Authenticator.lambda$static$0(okhttp3.Route, okhttp3.Response)解决办法:在运行module的buil...

2019-02-26 16:28:25 397

原创 设计模式(1)之建造者模式(Builder)

建造者模式给定一个模板,通过配置不同的属性,产生不同的对象常用建造对象的两种方式比较如果用重载构造方法的办法产生对象,那么如果类属性过多,①需要写很多重载构造方法②由于属性过多可能不知道对应位置的是哪个属性③需要对你不需要的一些属性赋予默认值如果用空构造方法产生对象,然后用set()给属性赋值,①重复调用set(),可能导致c端拿到不完整的对象②在多线程的情况下,无法保证...

2019-02-26 14:47:49 126

原创 学习笔记(4)之ARouter的简单使用

ARouter用于组件和模块之间通信,集成步骤如下①在build.gradle中做如下配置:defaultConfig { javaCompileOptions { annotationProcessorOptions { arguments = [AROUTER_MODULE_NAME: project.getName()] ...

2019-02-14 14:04:36 503

原创 学习笔记(3)之DisplayMetrics

DisplayMetrics类是用来获取手机屏幕信息的,通过以下方式获取DisplayMetrics类的对象WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);DisplayMetrics metrics = new DisplayMetrics();wm.getDefau...

2019-02-12 14:10:41 477

原创 学习笔记(2)之descendantFocusability属性

descendantFocusability属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。一般解决父控件与子控件之间焦点冲突的问题,比如如果ListView的item视图中有控件是ImageButton,那么ListView的Item点击事件失效,这时候就需要给item布局的根布局添加该属性,来解决这个焦点冲突。通常有三个值分别是:beforeDes...

2019-02-12 11:05:25 775

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除