Android
文章平均质量分 62
十个雨点
上帝说要有光,我说不批准,于是又了黑夜
展开
-
戒手机瘾神器?看这篇就够了
愉快的寒假又到了,你是不是再一次下定决心要读书学习,做一个低调的学霸呢?但现实是,又一次情不自禁的掏出手机。下面介绍的这个应用,可以帮你摆脱手机依赖症,帮你戒手机。这个应用的名字就叫——「不做手机控」(以下简称「手机控」)「手机控」如何帮你戒手机呢?屏保「手机控」的原理很简单粗暴,就是在不允许使用手机的时候,弹出屏保,阻挡你继续使用手机,市面上也有其他类似的产品,比如「我要做学霸」、「远离手机」、「原创 2018-01-25 22:24:58 · 1793 阅读 · 8 评论 -
Android的supportV7中默认按钮的颜色设置
我们知道,在styles.xml文件里面可以设置主题,在主题中设置的一些颜色,将会应用到默认的AppCompat控件上,从而很简单的就可以保持整个APP在UI上的一致性。下面是一个例子:<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/c原创 2016-10-19 18:13:02 · 9366 阅读 · 1 评论 -
ValueAnimator是如何动起来的
今天看属性动画的源码,涉及到的类比较多,调用关系也比较复杂,用了一个多小时才算大致理清其中的逻辑,简单的整理出来以备日后回顾,源码是 API level 24的。初始化过程以ObjectAnimator的ofInt()为例,关键调用链为:ValueAnimator的public static ValueAnimator ofInt(int… values); PropertyValuesHolde原创 2016-10-08 20:41:04 · 547 阅读 · 0 评论 -
AndroidStudio通过ndk使用第三方动态链接库
使用AndroidStudio的experimental plugin或是传统的Android.mk,通过jni封装调用第三方动态链接库的方法有共通之处,也有不同之处。原理首先要了解gcc的参数,这里不详细讲太多了,只说几个常见的: * -D用于在编译时定义宏,-DHH等于#define HH 1,-DHH=3等于#define HH 3 * -I用于指定头文件的查找路径 * -L用于指定链接原创 2016-08-26 10:31:15 · 5434 阅读 · 0 评论 -
Android沉浸式与SearchView的坑
Android开发虽然不算多难,但其中确实包含了这样那样的坑,我今天要说的这个坑可能很少人会遇到,不过万一呢。。。一开始是我想在项目的toolbar上添加谷歌原生支持的搜索功能,但是怎么弄都不对,键盘弹出以后搜索框会自动消失,如下图所示,可能比较乱,将就看看吧:经过两天的不断修改尝试,终于找到了症结所在:在styles.xml文件中设置windowTranslucentStatus=true会导致S原创 2016-09-04 20:42:21 · 1392 阅读 · 0 评论 -
Android通过程序接听或者挂断电话
这篇文章教你如何帮助用户自动接听或者挂断来电。当然并不是我原创的代码,我只不过是把stackoverflow上的一些代码整合了一下,做个代码的二传手。原创 2016-09-14 21:41:49 · 3897 阅读 · 2 评论 -
【造轮子系列】转轮选择工具——WheelView的改进
在【造轮子系列】转轮选择工具——WheelView中,我详细记录了这个自定义控件的设计思路和相关数据的计算。由于本人能力有限,当时还留下了一些不足的地方,主要包括:滑动的性能和流畅性有待提高,特别是快速滑动时的效果没有实现循环滚动的效果经过这一段时间的不断改进,现在基本上已经比较完美了,接近ios闹钟的滚轮时间选择器的效果了。下面结合代码,对比之前的版本,记录一下我做的这些改进。效果图源码Wh原创 2016-08-23 13:50:22 · 2486 阅读 · 0 评论 -
Android中如何正确的获得所有App列表
我们经常会遇到这样的需求:列出手机中所有能打开的App。此时我们不需要列出那些无法打开的app,也就是没有Activity的。网上有一些方法,都是过滤系统app的方法,将短信、电话这些App都过滤掉了,其实只要使用下面代码就行了:private void queryFilterAppInfo() { PackageManager pm = this.getPackageManager();原创 2016-08-31 11:45:43 · 4871 阅读 · 0 评论 -
Android中“强制停止”和广播保活的一个小坑
一直以来,使用广播进行Android进程的保活就是一种常规的保活方法,本着用事实说话的原则,我做了一个实验: 1. 写了一个demo,用于监听来电的广播,然后选择接听和挂断电话,源码见;github,AcceptOrRejectCallDemo; 2. 运行程序,用另一个手机给测试手机打电话,发现能收到广播,完成功能; 3. 在应用程序管理器中,强制停止这个demo,然后再用另一个手机给测试手原创 2016-08-28 12:45:32 · 3234 阅读 · 2 评论 -
【造轮子系列】转轮选择工具——WheelView
实现转轮的选择功能,效果见下图:本项目是由这个项目修改而成,不过基本上除了原来的大体框架以外,内部的实现逻辑全都做了大量修改,各位看官可以对比参考,在此必须感谢原作者给我的启发。先上源码:WheelView实现一个自定义View最基本步骤有: * 设计attribute属性 * 实现构造函数,在构造函数中读取attribute属性并使用 * 重写onMeasure方法 * 重写onDraw方原创 2016-07-03 14:27:25 · 6396 阅读 · 0 评论 -
android7.0 通过代码 分享图片到朋友圈
在Android7.0中,系统对scheme为file://的uri进行了限制,所以通过这种uri来进行分享的一些接口就不能用了,比如使用代码来调用分享朋友圈的接口。 此时就得使用其他的URI scheme来代替 file://,比如MediaStore的 content://。直接上代码: private static boolean checkInstallation(Context c原创 2016-12-05 20:06:46 · 6022 阅读 · 1 评论 -
Android上如何实现矩形区域截屏
对屏幕进行截屏并裁剪有两种方式:早截图和晚截图。早截图,就是先截取全屏,再让用户对截取到的图片进行修改;与之相对的,晚截图,就是先让用户在屏幕上划好区域,再进行截图和裁剪。其实两者并没有什么太大的区别,这篇就说说怎么实现晚截图。晚截图可以分成三步: 1. 在屏幕上标出截图的矩形区域 2. 调用系统接口截屏 3. 对截图进行裁剪效果图如下:第一步、在屏幕上标识出截图区域首先确定标识截图区域所需要原创 2017-01-06 11:44:26 · 6042 阅读 · 1 评论 -
使用Glide替换Picasso经验小结
0、 背景最近的工作是做一个IM的Android端的SDK和插件。在社交软件中浏览图片是一项基本功能,我们的IM也不例外,支持图片收发,预览等基本操作。但是随着斗图时代的到来,对IM的图片处理提出了更高的要求,IM的PC端也已经开始支持发送gif图片消息,所以Android上也准备支持gif图的收发和展示。先说说IM对图片库的一些需求: 1. 因为IM中聊天的图片需要从Http的Header中校验原创 2017-12-20 14:37:04 · 640 阅读 · 0 评论 -
使用Kotlin如何startActivity
转载注明出处:简书-十个雨点没错,就是这么简单的一个功能,不过由于初学kotlin,所以找了很久才找到如何写,所以还是贴出来给需要的人吧,上代码:startActivity(Intent(MainActivity@this, SecondActivity::class.java))或者startActivity(Intent(this, SecondActivity::class.java))原创 2017-06-16 10:39:27 · 16601 阅读 · 4 评论 -
Activity的LaunchMode导致调用系统相册选取图片立即返回RESULT_CANCELED,data为null
转载注明出处:简书-十个雨点如题,最近在做调用系统相册选取图片的功能时,发现在一些手机上就会出现这种问题,具体的现象是使用如下代码选取图片:String IMAGE_UNSPECIFIED = "image/*";int SELECTPHOTO=10086;Intent intent=new Intent(Intent.ACTION_PICK, android.provider.MediaSto原创 2017-04-15 11:51:22 · 3157 阅读 · 2 评论 -
RecyclerView中图片显示不出来的两种种可能解决方法
转载注明出处:简书-十个雨点简单描述一下背景:有一个页面,使用recyclerView展示一个列表,列表的每个元素是由一张图片、两个textview组成,很简单的布局。加载图片使用的的volley的imageloader。此时在页面展示的时候,有可能出现有些图片无法显示的问题,而且用notifyDataSetChanged()刷新也没用,而调试会发现,其实图片bitmap是已经正确加载了,但是设到i原创 2017-04-15 11:48:21 · 6894 阅读 · 0 评论 -
第一次编译AOSP简单流程
本文只记录如何跑通、编译AOSP,以及我自己遇到的坑,不讨论复杂问题,因为我也不会。首先只要准备以下三样东西:中科大的AOSP镜像AOSP官方教程——准备不急不躁慢慢来的自己!!!按部就班的配置环境根据AOSP官方教程检查你的环境,如果linux版本不对的话,最省事的方法就是重装成对应的版本,不过如果不想重装也没关系,顶多就是碰到一些坑,谷歌和百度总能找到办法的….跟着AOSP官方教程——搭原创 2017-03-15 21:05:40 · 9560 阅读 · 1 评论 -
【造轮子系列】仿谷歌语音搜索动画——VoiceAnimation
转载注明出处:简书-十个雨点谷歌App的语音搜索功能估计很多人都没用过,没用过的也没必要去用它了,因为实际上就类似手机百度,360手机搜索,是一款类浏览器产品,没有太多实用价值。不过不得不说的是,它的动画做得相当精致,如果要用一个词来形容,就是——灵动。先给大家看看效果:动图无法完全展现这个动画的细微精妙之处,想仔细研究的同学可以自行下载,不过接着往下看,我们会来模拟实现这个效果的。背景首先介绍一下原创 2017-03-09 17:24:59 · 1876 阅读 · 0 评论 -
第一款个人应用——《不做手机控》——终于上线啦!
从事Android已经大半年了,居然没有一款自己的产品,真是惭愧啊,不过经过这一个半月的艰苦奋斗,我人生中第一个个人Android应用终于诞生了!叫——不做手机控。感谢老婆大人起的好名字。这是下载连接:点击打开链接,请朋友们多提意见和建议!回想这半个月,还真不容易,每天下班继续码代码是最基本的,还要一个人兼任开发、产品、设计、测试等多项工作。其实产品、测试的工作还好说,毕竟平时接触的多,赶鸭子上架...原创 2015-12-24 21:23:31 · 9437 阅读 · 10 评论 -
Android如何判断NavigationBar是否显示(获取屏幕真实的高度)
有些时候,我们需要知道当前手机上是否显示了NavigationBar,也就是屏幕底部的虚拟按键。比如截屏的时候,要获取屏幕的高度,必须包括NavigationBar的高度。试过网上的多种方法,但是对那种可以通过手势来显示/隐藏的NavigationBar没办法,最后终于找到了一个好办法,看代码:public boolean isNavigationBarShow(){ if (Build.V原创 2017-01-06 11:45:24 · 1427 阅读 · 0 评论 -
如何在Bitmap截取任意形状
现在许多截屏应用中都实现了任意形状截图,我一开始有些疑惑:到底是如何判断一个像素点是在曲线内部还是外部的呢,因为多边形是否包含点的判断还是比较复杂的,计算起来复杂度可不低,后来看了一些资料,发现完全不是我想的那么复杂,很简单就能实现。多简单呢,往下看。先看最终效果:以全屏截屏并裁剪出任意形状的图形为例,除了在Android上如何实现矩形区域截屏中截屏的操作以外,还需要额外实现两个部分: 1. 根据原创 2017-01-06 11:45:03 · 2492 阅读 · 0 评论 -
【造轮子系列】一个选择星期的工具——SweepSelect View
【造轮子系列】一个选择星期的工具——SweepSelect View简介首先介绍一下这个自定义View的作用,先看图: 单选模式: 多选模式: 简单来说,就是一个通过滑动的方式来进行选择的工具,这种选择方式多用于星期的选择上,当然也是可以用于其他选项的。实现明确了这个View的功能后,我们再来想想应该怎么实现呢。先看这个View需要具有一些什么样的属性:首先是待选项目;然后是字体大小和颜色原创 2016-06-14 21:15:50 · 750 阅读 · 0 评论 -
如何使用array资源文件中定义的资源数组
这个题目比较绕,下面先来解释一下:array.xml文件如下: @drawable/pic1 @drawable/pic2 @drawable/pic3 @drawable/pic4一般我们在程序中这么使用:int[] picArray = getResources().getIntArray(R.array.myArray);我们期待拿到的是翻译 2016-05-09 12:55:36 · 1390 阅读 · 0 评论 -
getDimension和getDimensionPixelSize的区别
我在手动绘制View的时候,需要绘制一个0.68dp粗的线,由于并不是整数个dp,所以我一开始用getResources().getDimension()来获取,得到的粗细就是1.36px然后设置Paint.setStrokeWidth(1.36),这样画出来的线实际上是2px粗的(1280*720屏幕)。但是自动绘制的时候,0.68dp的线实际是占1px宽度的。后来经过研究,使用ge原创 2015-06-25 18:49:46 · 5007 阅读 · 0 评论 -
在onDestroy方法中做处理要小心
如题!原因是onDestroy的调用时机是不一定的,一般会在系统需要清理的时候调用。所以如果刚刚推出activity再重新进入,则可能导致onDestroy方法还来不及调用就又重新进入了,导致清理工作没有进行,从而对本次进如产生影响。因此可以在其他地方进行清理工作。原创 2015-06-18 15:41:44 · 2067 阅读 · 0 评论 -
OnFling和onSingleTapUp不执行的问题的一种解决方法
学习用GestureDetector来检测屏幕滑动事件的时候,一开始对onTouchEvent复写的时候写成了下面代码中(1)的样子 @Override public boolean onTouchEvent(MotionEvent event) { return new GestureDetector(new MyOnTouchListener()).onTouch原创 2015-03-30 10:01:32 · 3374 阅读 · 0 评论 -
Android资源图片读取机制
转自:http://blog.csdn.net/yellowcath/article/details/39641445在新建一个Android项目时,在res目录下会自动生成几个drawable文件夹,drawable-ldpi,drawable-mdpi,drawable-hdpi,一直以来都对此不太清楚,图片应该放到哪个文件夹下面,有什么不同的影响?以前一直都是干脆再新建一个不带后缀的转载 2015-03-21 18:07:08 · 560 阅读 · 0 评论 -
Android 监听按键信息的时候会出现两次响应的解决办法
最近的项目里面要监听软键盘的Enter的按键信息,如下图,需要在上一行按Enter的时候自动切换到下一行,以此类推。但是有时候会出现点击一次,响应两次的现象,也就是按一次Enter换两行,经过半天的实践,总结如下:1.网上说有调用 OnEditorActionListener,而不是OnKeyListener 的方法,经过测试并不能解决问题,http://www.2cto.com/原创 2015-03-26 10:22:38 · 3849 阅读 · 0 评论 -
Android权限大全
http://blog.csdn.net/worker90/article/details/6865208这是我在网上搜集的所有有关Android的一些权限,希望能帮到大家一些,其实从名字中基本上能了解权限定义功能android.permission.ACCESS_CHECKIN_PROPERTIES转载 2014-12-20 18:11:35 · 515 阅读 · 0 评论 -
Android中dip、dp、sp、pt和px的区别
http://www.cnblogs.com/greatverve/archive/2011/12/28/android-dip-dp-sp-pt-px.html1、概述 过去,程序员通常以像素为单位设计计算机用户界面。例如:图片大小为80×32像素。这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面转载 2014-12-20 18:10:50 · 423 阅读 · 0 评论 -
Handler和HandlerThread
http://blog.csdn.net/h3c4lenovo/article/details/79153921.什么是Handler?SDK中关于Handler的说明如下:A Handler allows you to sendand process Messageand Runnable objects associated with a thread'转载 2014-12-20 18:04:22 · 459 阅读 · 0 评论 -
Android中Context详解 ---- 你所不知道的Context
http://blog.csdn.net/qinjuning/article/details/7310620 本文原创 ,转载必须注明出处 :http://blog.csdn.net/qinjunin转载 2014-12-21 10:00:11 · 515 阅读 · 0 评论 -
几种模拟按键的方法
模拟按下物理按键的方法:1.Runtime runtime=Runtime.getRuntime(); try { runtime.exec("input keyevent " + KeyEvent.KEYCODE_BACK);} catch (IOException e) { e.printStackTrace(); }2.new Threa原创 2015-06-26 16:22:56 · 4881 阅读 · 1 评论 -
IOStream的用法总结
被复杂的IOStream弄晕了,因为经常会出现层层包裹的情况,学习了一天,发现其实挺有规律的,总结一下:以输入流为例,输入流分为字节流和字符流,分别对应InputStream和Reader,而InputStreamReader是将InputStream封装成Reader的桥梁,一般会用于包装最外层的是BufferedReader,中间可能原创 2015-07-14 20:05:35 · 9573 阅读 · 0 评论 -
使用AdBlockPlus在App中过滤网页广告
说起网页广告,那真是让人又恨又爱,它们不但占用了网页的可视控件,分散用户的注意力,还有些浮动广告干扰甚至误导用户操作。但是广告又是开发者重要的收入来源之一,同样作为一名开发者,还是挺能理解的。本文主要是告诉安卓开发者们,如何在你的app中有效的过滤网页广告,大大提高用户的使用体验。产品效果可以参考猎豹手机浏览器和360手机浏览器,有的情况下甚至比这两者的广告过滤效果还要好。过滤广告原创 2016-04-16 13:59:05 · 5469 阅读 · 5 评论 -
Android热补丁的一点总结
由于项目需要,我研究热补丁的实现是从12月上旬开始的,那时候我还是个对编译、ant、hudson只闻其名,对javassist、groovy闻所未闻的孩子;而现在,我已经是一个对ant、hudson一知半解,对javassist、groovy半熟不熟的孩子了,热补丁功能也终于上线了。首先感谢以下文章给我的帮助,是QQ空间团队的分享:http://mp.weixin.qq.com/s原创 2016-01-25 10:28:37 · 2178 阅读 · 2 评论 -
2.3以后的Sharedpreference是进程不安全的!
rt,在2.3以后,普通方法创建的Sharedpreference(一下简称sp)是进程不安全的,举个栗子:一个app有两个process:一个main,一个second,两者同时运行,并对sp进行修改操作:main中写入a,second写入b。你将看到这样的结果:如果最后一个执行写入操作的是main,则sp中只有a;反之,如果最后执行的是second,则sp中只有b。原创 2015-12-04 13:11:05 · 1007 阅读 · 0 评论 -
java.lang.UnsatisfiedLinkError,findLibrary returned null的一种可能的解决方式
今天弄NDK+JNI,编译没问题,但死活运行失败,报的错误是: E/AndroidRuntime(10679): java.lang.UnsatisfiedLinkError: Couldn't load libfilterengine from loader dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.原创 2015-10-30 21:02:37 · 1281 阅读 · 0 评论 -
Android Studio com.android.dex.DexException: Multiple dex files define(重复引用包)
今天从Eclipse向Android Studio导入工程的时候出现了Android Studio com.android.dex.DexException: Multiple dex files define(重复引用包)这个错误,弄了将近3个小时,马克一下。原因是Android Studio在导入Eclipse工程的时候,会自动把整个工程的jar包归类,并自动在每个module中引用用原创 2015-09-09 15:40:16 · 492 阅读 · 0 评论 -
ListView和GridView的item自动改变边距!
经过我测试,发现ListView和GridView中的item,不论是正常的item还是Header或者Footer在被添加到ListView中的时候都会自动改变item的边距:所有item都会横向展宽,左右各3.5dp。导致的结果就是如下图所示:其中蓝色的表示xml中设计的item宽度,和listview的显示宽度红色的表示实际绘制到listview中的宽度,也就是会被展宽到原创 2015-08-18 18:45:18 · 855 阅读 · 0 评论