- 博客(70)
- 资源 (2)
- 收藏
- 关注
原创 android 打开系统程序 显示系统图片与视频(用于备忘)
转载请标明出处。打开相册和视频跳转到图片与视频显示intent = new Intent(Intent.ACTION_VIEW);//图片和视频intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);//等价于intent.setData(Uri.parse("content://media/external/images/media"));//由log输出可以看到: MediaStore.Images.Media.EXTE
2021-06-01 15:18:39
14546
1
原创 Android 闯关
欢迎来到闯关模式,只要真正掌握了我列出的所有关卡,那么你就相当于高级水平了。基本上相当于阿里p6级别,一般的小公司leader的水平(技术上)。除了了解具体知识和内容外,我还会在每关布置作业题,大家可以写代码实践或者写文章输出,加深纸上觉来终觉浅,绝知此事要躬行的印象。这样才能转化成你的知识。完成后,可以在星球打卡,标签闯关打卡 -------------第1关:动画(建议学习时间:3天) 关键知...
2019-11-11 17:23:13
387
原创 androoid 渐变背景动画实现
在安卓里面,动画的背景色渐变(比如又红色变为蓝色)是依靠属性动画来完成的,属性动画大部分情况下是来实现View的运动动画的,因为View的背景也是View的属性之一,所以属性动画自然也就可以让view的背景产生渐变的效果,代码如下: View v = ...;//实例化一个Viewprivate static final int RED = 0xffFF8080;private st...
2018-10-14 07:16:56
326
原创 Android高级进阶书籍推荐
中级进阶推荐看一下以下这几本书:《Android从入门到精通(附光盘)》 明日科技 编《第一行代码2 Android(第二版)》 郭霖 著《Android开发进阶 从小工到专家 》何红辉 著《Android进阶之光 》刘望舒 著《Android开发艺术探索》 任玉刚 著《Android群英传》 徐宜生 著《疯狂Android讲义 》李刚 著Android高级进阶设计模式有关...
2018-08-31 13:55:26
3872
1
原创 Android图片压缩方法
android中图片是以bitmap形式存在的,那么bitmap所占内存,直接影响到了应用所占内存大小,首先要知道bitmap所占内存大小计算方式:图片长度 x 图片宽度 x 一个像素点占用的字节数以下是图片的压缩格式:其中,A代表透明度;R代表红色;G代表绿色;B代表蓝色。ALPHA_8 表示8位Alpha位图,即A=8,一个像素点占用1个字节,它没有颜色,只有透明度 ARGB_4444 表示1...
2018-03-22 16:29:05
306
原创 App性能优化小建议
导语安卓大军浩浩荡荡,发展已近十个年头,技术优化日异月新,如今Android 8.0 Oreo 都发布了,Android系统性能已经非常流畅了。但是,到了各大厂商手里,改源码自定系统,使得Android原生系统变得鱼龙混杂,然后到了不同层次的开发工程师手里,因为技术水平的参差不齐,即使很多手机在跑分软件性能非常高,打开应用依然存在卡顿现象。另外,随着产品内容迭代,功能越来越复杂,UI页面也越来越丰...
2018-03-16 11:50:28
1827
原创 Gc垃圾回收算法总结
Java虚拟机(JVM)导语: JVM(Java Virtual Machine)即Java虚拟机,它可以通过类加载器把Class文件加载到自己运行时内存中去执行的虚拟机。虚拟机是运行在操作系统中的,而进程又是操作系统的执行单位,所以当java虚拟机运行的时候,它就是操作系统中的进程实例单位,当它没运行时,可以把它叫做程序。下图是我们Java开发中工作流程,首先,将我们的源代码.java通...
2018-03-16 11:30:52
341
原创 Gc回收机制和回收算法解析
前言GC(Garbage Collection),和面向对象一样是java语言的一大特性之一,有了它,不用再像c/c++那样麻烦且频繁地free()和delete()。垃圾回收机制主要作用于java堆(Heap),也就是jvm用于存放对象实例的地方,所以很多时候我们也把java堆成为GC堆。Java的内存管理包括内存分配和内存回收。这两方面工作都是由JVM自动完成的,虽然降低了Java程序员的学习...
2018-03-16 11:24:35
1520
1
原创 hashmap排序问题
用的最多的HashMap,不保证映射的顺序,特别是它不保证该顺序恒久不变。LinkedHashMap,维持元素的插入顺序。TreeMap中有一个传入比较器的构造函数, Map中的元素可按此比较器进行排序。 以上3个知识点,前2个作为复习,最后一个才是本次使用的重点。要想改变TreeMap的默认比较次序,我们可以在其构造函数中传入一个自己的比较器。TreeMap的比较器构造函数如下: publi...
2018-03-14 16:50:35
853
原创 Java 查找两个集合中的相同元素和不同元素
1简单元素的查找一、找到2个集合中相同和不同的元素本文分享的示例代码实现提取2个集合中相同和不同的元素此处需要使用Collection集合所提供的一个方法:removeAll(Cellection list),removeAll方法用于从列表中移除指定collection中包含的所有元素。语法 removeAll(Collection<?> c)c:包含从列表中移除元素的collect...
2018-03-13 10:58:11
39777
3
原创 Eventbus接不到消息的处理办法
最近积累了好多问题和学习记录知识,但是最近公司项目实在太忙,抽不开身,后面有时间尽量都补上,今天先记录一个遇到的小问题:eventbus无法接收到消息我仔细查看了消息体和订阅方法,都没找到问题,那么应该是我订阅注册过程的问题了,经过log日志打印终于找到了问题所在:eventbus普通的订阅事件,即eventbus.getDefault().post(xxx)方法必须是在订阅后发送消息才可接收到...
2018-03-04 22:24:50
3333
原创 HashMap的工作原理
HashMap的工作原理是近年来常见的Java面试题。几乎每个Java程序员都知道HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因为这道题考察的深度很深。这题经常出现在高级或中高级面试中。投资银行更喜欢问这个问题,甚至会要求你实现HashMap来考察你的编程能力。ConcurrentHashMap和其它同步集合的引入
2017-12-07 16:35:56
179
原创 java中的WeakReference
java语言中为对象的引用分为了四个级别,分别为 强引用 、软引用、弱引用、虚引用。本文只针对java中的弱引用进行一些分析,如有出入还请多指正。在分析弱引用之前,先阐述一个概念:什么是对象可到达和对象不可到达状态。其实很简单,我举个例子:现在有如下两个类class A class B,在JVM上生成他们两个类的实例分别为 instance a instance b有如下表达
2017-09-14 11:56:37
271
原创 Android7.0 7.1 popupwindow showAsDropDown 显示异常解决办法
Android7.0 popupwindow showAsDropDown在屏幕上方弹出解决方法,通过版本控制解决,这属于Android7.0代码的bug新增:7.1版本问题修复。public static void showAsDropDown(PopupWindow pw, View anchor, int xoff, int yoff) { if (Build
2017-09-12 17:34:52
941
1
原创 WebView加载网页不显示图片解决办法
于大家来讲WebView肯定很熟悉,因为我们在日常开发中经常用到它。所以对于它的一些基本用法我就不在这啰嗦了,直接进入正题。我遇到的问题就是在使用WebView加载网页的时候图片不显示(我手机系统是5.1.1),当时出现这个问题我就想当然的以为,是不是给WebView少设置的什么东西。然后百度一下: mWebview.getSettings().setJavaSc
2017-09-12 11:13:44
5058
原创 android 7.0 适配
项目运行两个礼拜了,相机也在7.0以下运行的完美,突然早上同事拿他的7.0手机给我说 这是一个大bug.我一看调用相机直接崩溃。报的错误如下图:接着我以为是我的文件路径错误,找了老半天没发现问题,仔细想想不太可能了。于是乎,开始求助各大网友了。解决方案:1、(推荐)7.0之后你的app就算有权限,给出一个URI之后手机也认为你没有权限。不用修改原有代码,在Applicati
2017-08-28 16:24:42
792
原创 Android GridView设置item的高度与宽度相等、GridView条目宽高相同
自定义View,继承RelativeLayout或者LinearLayout,重写onMeasure()方法,代码如下:public class SquareLayout extends RelativeLayout { public SquareLayout(Context context, AttributeSet attrs, int defStyle) { s
2017-08-28 16:14:52
2315
原创 java常用23种设计模式
一、设计模式的分类总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式
2017-07-28 11:16:23
350
原创 Android 不依赖activity的全局悬浮窗实现
Android悬浮窗实现 实现基础Android悬浮窗实现使用WindowManager ,WindowManager介绍 通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象。每一个WindowManager对象都和一个特定的 Display绑定。想要获取一个不同的display
2017-07-20 10:01:15
22997
1
原创 Surfaceview的绘制与应用
1.surfaceview与view的区别Android 提供了view进行视图的绘制,可以满足大部分的会图需求,但在有些时候却是心有余而力不足。我们知道,view通过刷新来绘制视图。Android系统通过vsync信号来进行屏幕的绘制。刷新的时间间隔为16毫秒。如果在16毫秒内完成了索要刷新的绘制操作,那么在视觉效果上就不会产生卡顿的感觉。如果逻辑操作过多,频繁刷新就会造成界面的卡顿。
2017-07-13 16:12:04
318
原创 requestLayout、invalidate与postInvalidate的区别与使用场景分析
这篇文章将详细讲述与view自定义三大工作流程密切相关的两个方法,分别是requestLayout和invalidate,如果对Viwe的三个工作流程不熟悉的读者,可以先看看view的绘制流程。http://blog.youkuaiyun.com/qq_28273051/article/details/53992917http://blog.youkuaiyun.com/qq_28273051/article
2017-07-13 10:01:36
430407
1
原创 android中invalidate()的自动清屏含义以及屏幕刷新
invalidate()是用来刷新View的,必须是在UI线程中进行工作。比如在修改某个view的显示时,调用invalidate()才能看到重新绘制的界面。invalidate()的调用是把之前的旧的view从主UI线程队列中pop掉。 对于屏幕刷新有以下集中情况可以考虑: 1.不使用多线程和双缓冲 这种情况最简单了,一般只是希望在View发生改变时对UI进行重
2017-07-13 09:42:16
1139
原创 Android 单位转换工具
/** * Created by Administrator on 2017/7/10. */public class DisplayUtil { /** * 将px装换成dp,保证尺寸不变 * * @param context * @param pxValue * @return */ public stati
2017-07-10 15:53:15
313
原创 Android 实现滑动的七种方法
1.1 用Layout方法 我们知道,当view在绘制时会调用onlayout方法来设置显示位置。同样也可以通过view的left、top, right,buttom 四个属性来控制view的坐标。每次在ontouchevent的时候,我们都要获取一下触摸点的坐标。 @Override public boolean onTouchEvent(MotionEvent event
2017-07-10 15:31:17
535
原创 Scrollview 嵌套listView 与recycleView 滑动冲突的解决
本来我们用recycview代替了listview之后就很少会遇到scrollview了但是产品需求总是在不断的更新。在时间与技术的探索之下,还是会有一部分兄弟会选择这样的布局,下面我就来说说使用之后遇到的一些坑的解决方案。1 scrollview 签到listview 的解决方案(1)只需在MainActivity中 找到listview 和 scrollview
2017-06-30 14:55:59
1167
原创 fragment 与viewpager预加载的解决 懒加载
在项目中ViewPager和Fragment接口框架已经是处处可见,但是在使用中,我们肯定不希望用户在当前页面时就在前后页面的数据,加入数据量很大,而用户又不愿意左右滑动浏览,那么这时候ViewPager中本来充满善意的预加载就有点令人不爽了。我们能做的就是屏蔽掉ViewPager的预加载机制。虽然ViewPager中提供的有setOffscreenPageLimit()来控制其预加载的数
2017-06-29 13:59:22
436
原创 android 消息机制
Android的消息机制是指handler的运行机制,handler的运行需要底层的messagequeue和loop的支撑。messagequeue的中文翻译是消息队列的意思,顾名思义,它的内存储存了一组信息,以队列的形式,对外提供插入和删除操作。虽然叫消息队列,但是他内部是用单链表的形式来对消息进行储存的。 looper这里可以理解为消息循环。因为messageq
2017-06-29 13:45:55
251
原创 Android使用HttpURLConnection的302重定向问题
HttpURLConnection编程基础原理 在Android中,HttpURLConnection是比较基础的网络编程,因此在入门的时候建议大家学会使用这个编程,有助于大家了解其原理。这里就简单介绍一下,因为我们这篇博客主要解决的问题是如何解决收到结果不是200,--------------而是302重定向问题。使用HttpURLConnection编程原理我们编
2017-06-28 15:03:24
861
原创 Android性能优化的方法
Android作为一种移动设备,它的内存和cup都有了一定的限制。无法做到像pc那样,超大内存和高性能的cpu。这也意味着Android程序不能无限制的使用内存和cpu。过多的使用内存会导致oom,俗称内存溢出。过多的使用cpu资源,则会导致程序变得很卡,甚至出现anr。因此对程序员的要求也就更高了。下面我对Android的优化做一个介绍:1/ 布局优化布局优化的思想很简单
2017-06-26 17:31:19
379
原创 scrollowview 嵌套gridview回到顶部最完美解决
首先在scrolloview中添加如下代码<ScrollView android:id="@+id/scroll_person_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/bg_gra
2017-05-23 20:08:27
601
原创 Data Binding Library
Android最新推出了一个官方的数据绑定框架-Data Binding Library。现在github上也有很多三方的数据绑定框架,但是我们为什么要选择官方的呢?恩,答对了。就是因为是官方的,三方的东西说不定什么时候作者一步高兴就停止更新了,官方的就不一样了,我们可以看到它渐渐的稳定起来。好了废话不多说,从这篇博客开始,我们就来了解一下android最新给我们带来的数据绑定框架——Data
2017-01-19 14:33:24
325
原创 理解window和windowmanager
我们来看看用windowmanager添加window的过程mwindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); Button button = new Button(this); button.setText("糖宝"); mlayoutParams = new LayoutParam
2017-01-17 16:06:45
336
原创 如何成为一个优秀的研发人员
做一个产品,不可能一个人完成所有的东西,一个产品的开发到发布都是各个角色合作的。产品经理出交互,视觉来切图,开发者进行开发工作,测试做开发的测试,项目经理控制我们的整体进度和流程。作为一个工程师,你首先需要了解各个角色关心什么。产品和交互关心他们理想中的功能能否被正确的实现;测试关心的是一个开发周期结束以后,提供的测试版本稳定没有bug项目经理关心开发计划确定以后,产品迭代能否按着流程走而
2017-01-17 11:16:44
3342
原创 Android 属性动画
和view动画不同,他的作用对象进行了扩展,属性动画可以对任何对象做动画,甚至可以没有对象。除了对作用对象的扩展以外,他对动画效果也进行了加强。属性动画中有valueanimator,objectanimator,animatorset。通过他们可以实现绚丽的动画。属性动画可以对任何对象进行动画,不仅仅是view,默认时间是300ms ,默认帧率是10ms/帧。其可以达到的效果是在一定时间段内
2017-01-16 16:42:42
431
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人