Android小知识
文章平均质量分 64
年少的风
踏踏实实做好一件事,拒绝酱油!
展开
-
Android应用更新介绍提醒框
在很多Android应用更新的时候或者在第一次启动的时候会有一些功能使用指引,今天查了些资料,总结了两套方案:继承AlertDialog直接用WindowManagerimport android.view.WindowManager.LayoutParams;public class TipsDialog extends AlertDialog { private boolean is原创 2015-08-17 18:11:53 · 805 阅读 · 0 评论 -
使用ViewPager做轮播的banner控件
在网上查了些资料,该类控件虽然资料很多,但是都不具体,或者说或多或少都是有些坑的。经过两天的整理,最终得到一个相对满意的结果,在此记录一下核心的东西。 下面主要是PagerAdapter的封装,其他的控件拼凑部分就不描述了。/** * 使用views轮播控件{@link CyclicRollView}需要实现该类的abstract方法{@link #getView(View, int)} 和 {原创 2016-01-05 13:12:32 · 931 阅读 · 0 评论 -
SurfaceView实现点赞效果
项目需要实现点赞的效果,在网上找个一个解决方案: http://www.jianshu.com/p/03fdcfd3ae9c 初用一些还好,暴力测试一下发现很卡,不太好用。并且像如此麻烦的动画,确实该用 SurfaceView来实现。于是就找资料,没有找到直接能用的。最后,还是自己来实现。先看效果图: 点击屏幕时,从屏幕底部飘出随机的一个赞的图标。 demo中两个核心的东西: 1.原创 2016-03-08 15:34:55 · 1849 阅读 · 3 评论 -
应用内切换主题有哪些方案可以实现
应用内切换主题有哪些方案可以实现这里讨论的只是白天、夜晚主题切换这种场景,不涉及外部资源加载。现在要给App添加夜晚主题,所以就需要选择一种应用内部更换主题的实现方案,目前来说,比较常见的几种方式如下:Theme设置Theme来切换不同主题。优点:利用系统自带的机制实现,根据标志位setTheme()即可。缺点:在主题切换界面不重启的情况下,不能自动完成界面主题的刷新。遍历View对主题的更换,使用转载 2016-03-22 17:32:21 · 648 阅读 · 0 评论 -
实现activity变暗的效果
有什么便捷的方式实现activity变暗的效果不要新开启Activity的方式也不要使用Dialog让背景跟Dialog出现一样,变暗,带动画。private void dimBackground(final float from, final float to) { final Window window = getWindow(); ValueAnimat转载 2016-03-22 17:34:31 · 1214 阅读 · 0 评论 -
Android 在使用Bitmap的时候为啥要手动调用recycle方法呢?
我们知道手机的内存有限,而图片所占的内存往往又很大。所以在处理图片的时候可以在服务端或者客户端提前将图片处理一下,减少其体积。另外使用Bitmap的时候可以使用SoftReference来及时释放资源。但是看到好多程序还是主动地调用Bitmap对象的recycle方法来释放资源。可能我们就有疑问了:不是java会自动回收内存吗,那干吗还要手动地去回收?要解决这个问题,我们得去看看recycle的源码转载 2016-04-26 11:42:40 · 754 阅读 · 0 评论 -
Android使用Handler防止内存泄漏
在Android开发中经常会使用handler做定时任务或者更新UI等,但是handler在好用的同时也是非常容易导致内存泄漏。因为handler在作为一个类的属性时会持有该类(通常是activity或fragment)的引用,而handler在发送message时,该message的target通常就是handler本身,也就是通过handler发送的消息间接持有该类的引用。当该类应当被回收,而消原创 2016-04-26 17:53:01 · 1753 阅读 · 2 评论 -
Android应用内存泄漏笔记
注册的监听回调,需要考虑移除监听;尤其是注册到单例中的监听!!!bitmap用完之后记得recycle,原因请看这里注意context(activity,fragment)的引用;注意handle的使用,由于延时消息(包含handle的引用),导致handler所在的context不能释放;解决方案看这里原创 2016-04-26 17:37:17 · 333 阅读 · 0 评论 -
Android开发中好用的开源工具(持续更新)
1. EmmageeEmmagee是网易杭州研究院QA团队开发的一个简单易上手的Android性能监测小工具,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能状态的变化,且用户可自定义配置监控的频率以及性能的实时显示,并最终生成一份性能统计文件。 github:https://github.com/NetEase/Emmagee2. LeakcanaryLeakCanary原创 2016-04-29 10:21:56 · 710 阅读 · 0 评论 -
Volley缓存说明——一个请求两次回调
从上一篇文章Android 异步网络请求框架-Volley了解volley的一些出来过程,当然也包含网络请求和缓存处理的流程,但是在此需要单独做一些说明。 我在使用过程中忽略了一个事情,就是一个网络请求可能会有两次结果回调,其实这个在上一篇文章中也有说明,只是没有特别说明,很容易被忽略。 当进行网络请求时,先会判断缓存,当缓存还未过期,但是需要刷新时,volley会先将缓存回调(第一次),然后以原创 2016-02-01 14:05:31 · 2109 阅读 · 0 评论 -
初识Universal-Image-Loader
Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。(1).使用多线程加载图片 (2).灵活配置ImageLoader的基本参数,包括线程数、缓存方式、图片显示选项等; (3).图片异步加载缓存机制,包括内存缓存及SDCard缓存; (4).采用监听器监听图片加载过程及相应事件的处理; (5)原创 2016-02-16 19:25:01 · 739 阅读 · 1 评论 -
线程池封装类—借鉴ImageLoader的线程工厂
在Android开发过程中免不了需要使用异步线程,但是在项目中大量使用 new Thread() { public void run() { // do sth }; }.start();会造成很多野线程,不但不易维护,在性能上也是有一定折扣。 ps原创 2016-02-18 10:46:04 · 2656 阅读 · 0 评论 -
Android应用多渠道打包脚本
使用ant打包Android程序时,请确保在项目根目录下包含build.xml,且文件中有声明项目名,最后在release目录下面会有我们想要的各种渠道包#!/bin/shANDROID_PROJECT_HOME="."# get project name APPNAME=$(cat $ANDROID_PROJECT_HOME/build.xml | grep "\<project")APPN原创 2015-09-30 15:08:06 · 746 阅读 · 0 评论 -
Android项目自动编译脚本记录
Android项目自动编译脚本记录 下面是编译项目的shell脚本 ant.sh:ANDROID_PROJECT_HOME=$PWD/frameworks/runtime-src/proj.androidPLUGIN_HOME=$ANDROID_PROJECT_HOME/assets/dex/rm -rf $ANDROID_PROJECT_HOME/bin/ &&rm -rf $ANDROID原创 2015-10-31 16:25:53 · 2010 阅读 · 0 评论 -
View的事件分发机制
所谓点击事件的事件分发,其实就是对MotionEvent事件的分发过程。 当一个点击操作发生时,事件最先传递给当前的activity,由activity的dispatchTouchEvent来进行事件派发,具体的工作是由activity内部的window来完成的。window会将事件传递给decorview,decorview一般就是当前界面的底层容器,可以通过activity.getWi原创 2015-12-10 13:15:08 · 733 阅读 · 0 评论 -
Android将两个bitmap合并
把两张bitmap覆盖合成为一张图 /** * 把两个位图覆盖合成为一个位图,以底层位图的长宽为基准 * @param backBitmap 在底部的位图 * @param frontBitmap 盖在上面的位图 * @return */ public static Bitmap mergeBitmap(Bitmap backBitma原创 2016-01-22 15:21:54 · 16429 阅读 · 2 评论 -
Android的view坐标——一张图
一张图说清楚view的坐标系 原文地址:http://blog.csdn.net/jason0539/article/details/42743531view的点击事件 public boolean onTouch(View v, MotionEvent event) event.getX() 和 event.getY() 也是相对容器的位置转载 2016-01-25 16:49:02 · 651 阅读 · 0 评论 -
Android优化adapter及SparseArray介绍
在鸿洋大神的博文里介绍了Android 快速开发系列 打造万能的ListView GridView 适配器在此,我直接把核心的部分截取出来详细记录一下: 这个是我在项目中使用的一个工具类:public class ViewHolderUtil { /** * 获取容器中指定的元素 * * @param view * @param id *原创 2016-02-02 16:28:38 · 970 阅读 · 0 评论 -
图片循环滚动控件ScrollingImageView
设置一个图片,控件可以自动循环滚动,单张图片首尾拼接/** * 可滚动的ImageView控件,使用startRolling(int) 或者 startRolling(Bitmap)启动滚动 * @author brian512 */public class ScrollingImageView extends View { public final float SPEED_SLOW原创 2016-03-02 20:58:10 · 2495 阅读 · 2 评论 -
判断Fragment是否可见,填坑
首先说明,Fragment虽然有onResume和onPause的,但是这两个方法是Activity的方法,调用时机也是与Activity相同,所以Fragment的onResume和onPause的使用基本很少,于是,Fragment是否可见就不能这样去判断了。 网上很多关于使用setUserVisibleHint的解决方案,下面给个链接: http://blog.csdn.net/jiang原创 2016-02-27 10:37:59 · 5760 阅读 · 1 评论 -
Android中dp,px,sp等单位转换
一般我们都会自己写一个dp转px或者sp转px的工具类,给个链接http://blog.csdn.net/top_code/article/details/8588703 但是今天我发现Android自带了这种转换工具类TypedValue,下面是转换的方法 /** * Converts an unpacked complex data value holding a dimens原创 2016-06-01 12:27:28 · 606 阅读 · 0 评论 -
开源中国(oschina)Android客户端主页返回按钮效果实现
先看看效果 开源中国的Android客户端的返回按钮就是这样子的,刚开始看的时候感觉好酷,然后就看源码,找着找着发现其实是Android封装好了的一个控件DrawerArrowDrawable,但是这个只是在Android5.0才加入的,于是乎就看了一下这个控件的源码,发现很容易就能抠出来单独用。 于是,我用抠出来的DrawerArrowDrawable写了个demo:https://git原创 2016-06-01 14:06:40 · 585 阅读 · 0 评论 -
android:ellipsize实现跑马灯效果
要实现标题跑马灯效果,找了好多资料,终于搞定,在这里mark一下: <TextView android:layout_width="240dp" android:layout_height="wrap_content" android:gravity="center" android:ell原创 2016-07-31 16:27:49 · 534 阅读 · 0 评论 -
OkHttp源码探索
之前一直在使用volley作为网络请求模块,但发现volley已经过时(源码还是很值得反复品味的),现在基本是Retrofit和OkHttp的天下了,于是把OkHttp拿来学习一下。 首先,看一个OkHttp的简单示例: Request.Builder builder = new Request.Builder().url(url).get(); Request o原创 2016-09-13 20:41:55 · 475 阅读 · 0 评论 -
Android沉浸式状态栏的实现方案探讨
多次尝试实现Android沉浸式状态栏,资料很多也很杂。并且有好几种实现方案,网上有好些资料把几种方案都混在一起,暂时把效果实现了,但是遇到问题后就蛋疼了。于是,这两天我就把从根源上把这几种方案的原理都整理了一下。主要有四种方案,有的方案还可以细分: 1. WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; 2. Window.setStatu原创 2016-10-08 18:06:35 · 869 阅读 · 0 评论 -
Emmagee学习之获取内存及CPU占用等数据
Emmagee是网易杭州研究院QA团队开发的一个简单易上手的Android性能监测小工具,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能状态的变化,且用户可自定义配置监控的频率以及性能的实时显示,并最终生成一份性能统计文件。 测试QQ的效果如下: /** * 通过pid获取应用占用的内存 * @return */ publi原创 2016-08-30 11:28:07 · 1352 阅读 · 0 评论 -
Android编程规范
命名规范1. 基本原则(1) 代码风格与android源码保持一致 (2) 命名要清晰明了、有明确含义 (3) 同一产品命名风格要保持一致,避免一意多词 (4) 同一作用域,不能有变量重名,如局部变量与全局变量重名2. 包名(1) package命名如com.brian.xx.yy.zz,xx为产品,yy为模块,zz为子模块 (2) 模块划分,按以下两种方式均可,但需要项目组统一 -原创 2016-10-27 12:24:40 · 627 阅读 · 0 评论 -
使用mp4parser进行音视频合成
需求:相机录制短视频,支持暂停继续,并配有背景音乐。 由于Android自带的MediaRecorder并不支持视频录制暂停,所以只能录制视频片段,最后录制结束时将之前录制的视频片段合并起来。背景音乐也是需要合成到视频中。网上搜索到的大多数解决方案是使用mp4parser,名字看上去就感觉挺上手的,后面一看包名,竟然是googlecode,所以义无反顾的使用mp4parser。 很多博客里面都有原创 2016-10-26 19:05:32 · 8358 阅读 · 2 评论 -
Android View如何加载drawable资源
Android开发时难免会遇到图片加载的问题,简单的做法就是把问题丢给图片框架处理,几个主流的图片框架各有特色,这里也不展开说,今天突然想了解一下Android图片资源的加载,主要是想参考一下,view是如何加载drawable的,因为我们可以直接在UI线程直接设置view的背景res,如果这个资源图很大会不会导致ANR或者OOM? 首先从View.setBackgroundResource(in原创 2016-11-27 11:40:33 · 3993 阅读 · 0 评论 -
支付宝 AR 红包辅助工具
上周支付宝退出AR红包,玩法确实不错,但是上线当天就被操翻了。笔者是周五开始玩的,当天同事说可以直接扫线索图片打开红包,由于线索图添加了防作弊的黑色条纹,所以笔者试了好多次都没打开一个,于是就放弃了。哪知下班回家在公交上在头条看到文章讲如何处理线索图增大打开红包的几率: 1.将线索图片复制一份,透明度设置为50%; 2.覆盖在原图上,并向下偏移几像素; 3.将合成后的图片用高斯模糊处理,半径设原创 2016-12-27 12:35:01 · 835 阅读 · 1 评论 -
使用JavaCV(ffmpeg)录制视频
使用JavaCV(ffmpeg)录制视频JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了ffmpeg、OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口,可以通过其中的utility类方便的在包括Android在内的Java平台上调用这些接口。其中使用最多的应该就是ffmpeg了。 起初Ja原创 2017-03-22 17:59:35 · 13648 阅读 · 1 评论 -
Android实现沉浸式状态栏的那些坑
最近项目需要实现沉浸式的状态栏,其实我在之前就了解过Android的沉浸式,发现有些棘手就放弃了,但是此次是公司的项目需要的,就花了几天把这个问题搞定了,在此记录一下,并mark几个坑。 首先,沉浸式是Android 4.4及以上才有的,在后续的5.0及6.0上面都增加了一些相关支持,于是问题就不太好办了。先看我实现的效果: 首先,在4.4版本添加了WindowManager.LayoutP原创 2016-08-02 17:40:23 · 43856 阅读 · 16 评论 -
Android沉浸式通知栏开源库SystemBarTint源码解析
前一段时间我写了一篇关于沉浸式的文章:Android实现沉浸式状态栏的那些坑 当时只是知道SystemBarTint的存在,并没有去了解它的实现效果和原理,因为搜Android沉浸式时好多都提到这个开源库,还以为很强大、很深奥,就没敢仓促的去看源码。今天把SystemBarTint拉下来一看,发现这个库仅仅只有一个类:SystemBarTintManager,全篇通读下来发现原理也是相当简单:就是原创 2016-08-23 15:56:31 · 3577 阅读 · 0 评论 -
Android发送邮件mark
public class MailSender { private static final String LOG_TAG = MailSender.class.getSimpleName(); private static final int PORT = 25; /** * 以文本格式发送邮件 * @param sender 发件人邮箱 * @原创 2016-08-30 11:36:40 · 710 阅读 · 0 评论 -
Android的Drawable体系
在官方文档中对Drawable的定义为:可绘制物件的一般抽象(A Drawable is a general abstraction for 『something that can be drawn』)。『可绘制的』本身也是个抽象的概念,而且容易让我们联想到Android里另一个较抽象的概念『View』,我们知道View也是可以绘制的,那View是不是也可以称为Drawable呢?官方的文档中也有这转载 2016-08-16 18:52:26 · 505 阅读 · 0 评论 -
Android Drawable之ScaleDrawable
OverviewScaleDrawable与ClipDrawable类似,可以根据设置的level值对drawable进行缩放,但与ClipDrawable不同的是,ScaleDrawable还可以根据设置android:scaleWidth和android:scaleHeight进行相应百分比的缩放。创建和使用语法:<?xml version="1.0" encoding="utf-8"?><s转载 2016-08-16 19:19:06 · 4788 阅读 · 1 评论 -
Android Drawable之ShapeDrawable
OverviewShapeDrawable 根据原始的形状来绘制图形,如矩形,圆形,线条等,可以是一个纯色的色块,也可以渐变的效果。当没有设置具体的图形时,默认为矩形。创建和使用ShapeDrawable可以使用<shape>标签在xml文件中定义,但是与之前介绍的几种Drawable不同,<shape>标签指向GradientDrawable的指针,也就是说编译的类型是GradientDrawab转载 2016-08-16 19:32:27 · 3624 阅读 · 0 评论 -
Android Drawable之LayerDrawable
Overview一个LayerDrawable是一个可以管理一组drawable对象的drawable。在LayerDrawable的drawable资源按照列表的顺序绘制,所以列表的最后一个drawable绘制在最上层。 在xml文件中使用<layer-list>作为根节点来定义LayerDrawable,通过item子节点定义每一层的drawable,layer-list没有属性节点,只包含i转载 2016-08-16 18:59:56 · 3712 阅读 · 0 评论 -
Android Drawable之ClipDrawable
OverviewClipDrawable可以根据设置的level值和方向对当前Drawable剪切后显示。它根据level的属性值,决定剪切区域的大小,level的取值范围从0到10000,level为0时完全不显示,为10000时完全显示。(The drawable is clipped completely and not visible when the level is 0 and full转载 2016-08-16 19:13:49 · 1872 阅读 · 0 评论 -
Android Drawable之InsetDrawable
OverviewInsetDrawable 表示一个drawable根据指定的距离嵌入到另外一个drawable内部。(我们看到的其实还是同一张图片,只是会空出一些边距)当控件需要的背景比实际的边框小的时候比较适合使用InsetDrawable。创建和使用在xml文件中使用<inset>作为根节点来定义InsetDrawable。 语法为:<?xml version="1.0" encoding=转载 2016-08-16 19:09:02 · 2863 阅读 · 0 评论