
Android
文章平均质量分 84
crianzy
一路艰辛,默默前行
展开
-
Binder 浅出深入 -- 你真的会用 binder?
做过 Android 快进程通信的同学应该都知道 Binder 是个什么东西。有了他我们可以很方便的调用另外一个进程中的方法。如果看过 Android Framework 层源码的话,更会发现说,大部分都是在和 binder 打交道。所以 Binder 这套跨进程通信机制(IPC)对 Android 开发通信来说是非常重要的。但是想要深入的了解总是感觉有点力不从心, 下面来一起浅出深入的了解 Bin原创 2017-03-11 00:39:44 · 824 阅读 · 1 评论 -
ViewPager 实现 GallerView 效果, 显示左右两边
正常情况下, ViewPager 一页只能显示一项数据, 但是如果需求是, 除了小显示本页数据, 还有包 左右两半的数据 也都露出一点来呢?这该怎么处理?后面在网上了搜了一下, 发现有不少这样得到文章, 这里自己也写一篇总结一下.其实 主要就是用到 View 的 android:clipChildren 属性.简单来说这个属性, 就是 父View原创 2016-01-05 17:29:39 · 11519 阅读 · 4 评论 -
ExpandTextView 实现
最近在项目中遇到一个 需要实现 一个 点击可展开 收起 TextView如下图所示: 在网上看了一下 相关类库 找到一个还好的https://github.com/Manabu-GT/ExpandableTextView上面的那个 是用LinearLayout 包装 TextView 和 ImageView 组成然后 在动画的工程中原创 2015-12-03 00:41:43 · 2503 阅读 · 0 评论 -
NestedScrollingParent, NestedScrollingChild 详解
NestedScrollingParentNestedScrollingChild这是两个接口, Android 就是通过这两个接口, 来实现 子View 与父View 之间的嵌套滑动这样的嵌套滑动机制是在 Android 发布 Lollipop 之后提供的 不过同样在Support v7 中同样支持了 同时 RecycleView 以及 Android 5原创 2015-12-15 01:28:29 · 20530 阅读 · 9 评论 -
Android 打包, 不同渠道使用 不同的资源文件
在打渠道包的时候, 有事要 需要不同的渠道使用不同的资源文件 之类的可以看下 build 中的渠道列表: // Channels productFlavors { google {} wandoujia {} baidu {} qihu360 {} qq {} xiaomi原创 2015-12-27 23:57:40 · 4210 阅读 · 3 评论 -
Bitmap.createBitmap 得到 的bitmap 不一定是新的bitmap
File tempFile = null;try { Bitmap bitmap = BitmapUtils.createThumbnail(imagePath, 1080, 1080 * 1920); if (bitmap != null) { Bitmap tmp = BitmapUtils.rotateImg(BitmapUtils.getOrientati原创 2015-12-27 23:52:52 · 3865 阅读 · 0 评论 -
动画的重用
在使用画的使用 很多情况狭隘 都是 通过 ValueAnimator.ofInt(int a , int )这样的方法来实现的, 这样会重新创建 一个新的Animator如果频繁 的创建对象 也是很耗性能的所有, 所有需要适时 的重用 Animator对象还有就是如果频繁的创建 Animator对象, 我们还会习惯性的创建 Interpolator 对象 像这样原创 2015-12-27 23:48:30 · 830 阅读 · 0 评论 -
读取系统所有 图片 和缩略图
/** * 读取系统的 多媒体索引 获取 sd卡中的所有图片信息 */ public void initImagesIndex() { ImageCache. imgDirPathList = new ArrayList(); ImageCache. imagesIndex = new HashMap>>();原创 2015-12-12 11:36:43 · 1361 阅读 · 0 评论 -
MediaPlayer 同步加载字幕 与 手动解析字幕
通过把 字幕文件传给MediaPlayer , media 可以在自动的适配字幕, 在正确的时间点, 给我们 当前应该显示的字幕回调不过只能在 API 16 以上才能使用 mMediaPlayer = new MediaPlayer();try { mMediaPlayer.addTimedTextSource(path, MediaPlayer.MEDIA_MIME原创 2015-12-12 11:01:22 · 9415 阅读 · 1 评论 -
TextView 文字描边
在不是很明显的描边 可以使用 阴影来互动如下:android:shadowColor 阴影颜色android:shadowDx 阴影的水平偏移量android:shadowDy 阴影的垂直偏移量android:shadowRadius 阴影的范围真正的描边方法如下:实现方法是两个TextView叠加,只有描边的TextView为底,实体TextView叠加在上面原创 2015-12-12 11:09:37 · 3630 阅读 · 0 评论 -
ViewPager Transform 使用详解
我们在使用Viewpager 的时候, 经常 会加入一些好看的滑动效果这个是怎么实现的呢?其实很简单, google 以及为我提供了相应的方法.通过 setPageTransformer 就可以设置 Viewpager的滑动效果.Android 官方文档 已经提供了两种 滑动效果:http://developer.android.com/intl/zh-cn/traini原创 2016-01-06 00:15:02 · 10519 阅读 · 4 评论 -
Android 新增一张图片 加入相册
当我要把一张图片加入到相册时, 执行如下的 代码, 发个广播就好了 getContext().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));但是发现在有些手机上 比较慢, 不是很实时如果 做相册之类的 需求的画, 新增一张图片然后在立马刷新数据的画,原创 2015-12-22 00:18:41 · 2134 阅读 · 0 评论 -
Android draw canvas save restore saveLayer 学习
画图需要四大基本要素:1、一个用来保存像素的Bitmap;2、一个Canvas画布,绘制Bitmap操作;3、绘制的东西4、绘制的画笔Paint(颜色和样式)如何获得一个Canvas对象?通过重写View.onDraw方法自己创建一个Canvas对象调用SurfaceHolder.lockCanvas(),返回一个Canvas 在 surfaceView 或 T原创 2015-12-04 16:40:22 · 4743 阅读 · 0 评论 -
使用 IntelliJ Debug Android 源码
这里需要用到 Java 远程 Debug 的相关知识, 其实我们使用 Android Studio 使用的也是远程 debug . 相关参考https://www.jetbrains.com/help/idea/2016.3/run-debug-configuration-remote.html配置 IntelliJ remote debug按照下图进入 RunDebug 配置界面, 并新增一个原创 2017-02-25 18:09:49 · 3271 阅读 · 0 评论 -
使用 IntelliJ 查看 Android 源码
使用 IntelliJ 查看 Android 源码原创 2017-02-25 18:08:43 · 8006 阅读 · 1 评论 -
Mac 10.12 编译 Android 源码
Mac 10.12 编译 Android 6.0 源码原创 2017-02-25 17:59:07 · 4249 阅读 · 2 评论 -
Mac 10.12 快速下载 Android 源码
Mac 上快速下载 Android 源码原创 2017-02-25 17:57:39 · 1959 阅读 · 0 评论 -
快速下载 Android framework 源码
官网 Android framework源码git地址github: https://github.com/android/platform_frameworks_base google 官方: https://android.googlesource.com/platform/frameworks/base.git现在Android源码也迁移到了github, 就不像原来还需要翻墙下载. 但是原创 2016-06-01 12:25:53 · 11494 阅读 · 1 评论 -
读取 其他Apk 中的资源文件
如果是在做一些 主题 皮肤之类的功能.很多都是把 相应主题的资源 放到 一个apk.然后我们吧这个 apk 下载下来. 然后读取 这个apk 中的资源 镜像加载 ...网上很常见的就是 下载下来这个apk 后需要 安装 才去加载这个 apk 的资源其实还有一种 放开 可以 不用 安装这个apk 而且就能 加载这个apk 的资源,而且 还能执行一些相应的方法...原创 2016-02-24 22:39:50 · 4411 阅读 · 0 评论 -
ListView 源码 回收机制分析
在网上 看了不少关于 ListView 的源码解读 回收机制相关的文章.但是基本上就是看了就忘然后自己也去浅浅的看了下 ListView 源码然后自己 结合 网上看的文章 和自己看的源码 写下了这片文章.首先看下 ListView 继承关系图: 从上图 可以 基本了解 大致继承结构.我们这里主要 看 ListView 和 A原创 2016-02-20 23:09:15 · 1729 阅读 · 0 评论 -
ViewPager Adapter FragmentStatePagerAdapter FragmentPagerAdapter 使用详解
ViewPager 是Android 开发中特别常用的一个View所以我们今天来看看ViewPagerViewPager 是support-v4中的View<android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent"原创 2015-12-06 16:45:58 · 7201 阅读 · 1 评论 -
Android ProgressBar 详解 改变 ProgressBar 颜色
今天来说说 ProgressBar 这个东西,之前一种是用的 项目里面 别人写好的直接用, 还没怎么细看这两个东西ProgressBar 很简单就一进度条默认情况下, 他是圆形的, 但是它还有另一种 水平长条状的形态同时还需要了解的有:1. 水平形状的 ProgressBar 是有两个进度的 向我们看到 视频的精度条, 有一个是当前播放的,还有一个是下载原创 2015-11-13 00:06:42 · 66233 阅读 · 2 评论 -
Android StatusBar
获取状态栏高度/** * 获取状态栏高度 * @return * @hide */public static int getStatusBarHeight() { return Resources.getSystem().getDimensionPixelSize(Resources.getSystem().getIdentifier("status_bar_heig原创 2015-12-12 10:55:52 · 1173 阅读 · 0 评论 -
MIUI 判断悬浮窗权限
/*** Created by chenzy on 2015/3/31.** MIUI 悬浮窗判断工具类*/public class AlterWindowUtil { public static final String TAG ="AlterWindowUtil"; /** * 4.4 以上可以直接判断准确 * * 4.4 以下非MIU原创 2015-12-12 11:18:35 · 4081 阅读 · 0 评论 -
Android Scroller 的简单用法
关于scroller 他是Androidview 移动的一个辅助类首先来说一说View 的移动,View 有两个移动的方法:View.scrollBy(x, y)View.scrollTo(x, y)需要注意的 这两个方法 移动的不是View 本身, View 里面的内容,不能单纯的理解是移动子View例如TextView 调用 scrollBy原创 2015-10-31 15:20:26 · 570 阅读 · 0 评论 -
gradle 方便 打包 备份apk 以及mapping文件
最近在给测试打包的过程中, 总是感觉略显麻烦,需要以下步骤:1. 执行 ./gradlew clean assembleGoogleRelease 打包名2. 本地备份 相应的Apk 以及相应的mapping 文件3. 发送给测试1 2 步骤感觉很是麻烦, 需要把打好的包 以及mapping文件手动copy 一份到自己的磁盘中, 同时还要该懂相应的文件名称很是麻烦,想说原创 2015-10-28 22:17:05 · 4717 阅读 · 0 评论 -
理解 BindService 与 StartService
Service 不像Activity有那么多得生命周期方法, Service 只有两种状态 启动 和没启动 启动时 会调用 onCreate死掉时, 即状态变为没启动时, 会回调 onDestroy方法调用 startService 时 Service会执行 onCreate (如果Service没有启动则会执行该方法) onStart原创 2015-10-29 20:08:35 · 764 阅读 · 0 评论 -
Android AsynTask 与Thread 或线程池 使用分析
做Android的都知道, AsynTask 就是google 给我提供的一个在另一个线程 执行任务的工具.从某种层面上将 , 他就是实现了 java 里面的Thread 的功能但是经常在网上看到说, 推荐使用AsynTask 少用Thread这是为什么? 我也看了下 AsynTask 的源码 其实挺简单的,里面有两个静态的线程池, 一个是同步线程池, 该线原创 2015-11-11 23:11:23 · 966 阅读 · 0 评论 -
Android View 绘制过程
Android View 的绘制 的基本过程是:1. Measure 测量, 即确定View 的大小2. Layout 布局,即确定View 的摆放位置3. Draw, 画View首先看Measure 关于Measure 放方法有:public final void measure(int widthMeasureSpec, int heightMeasur原创 2015-11-07 17:43:31 · 653 阅读 · 0 评论 -
Android ProGuard 混淆 详解
现在写的app 基本都是经过混淆了的,如果不混淆, 发布出去,别人一反编译 就可以直接看你的源码了ok 来说一下混淆吧:我现在用的AndroidStudio , 只需要在 build.grade 的配置文件中配置如下即可: buildTypes { debug { versionNameSuffix ".dev" } release {原创 2015-11-06 20:02:53 · 47992 阅读 · 5 评论 -
Android 屏幕方向监听
正常情况下可以在 Activity 中能够监听到,但是如果是在Window上就不那么好监听了.ok 首先说一下正常情况下 屏幕方向的监听1. 在mainfest文件中得Activity中加入如下属性 android:configChanges="orientation|screenSize"如下: <activity android:name=".MainActiv原创 2015-11-05 23:28:14 · 5111 阅读 · 0 评论 -
Android activity 启动模式 详解
在Android 中最常用到的组件就是activity .Activity 有4种启动模式standard 默认的启动模式,每次都启动一个新的ActivitysingleTop 当站定的Activity与要启动的Activity 是同一个时, 则不启动新的ActivitysingleTask 把启动的Ac原创 2015-11-04 23:05:57 · 627 阅读 · 0 评论 -
WindowManager.LayoutParams 参数学习
WindowManager.LayoutParams 是 WindowManager 接口的嵌套类;继承于 ViewGroup.LayoutParams 。 它的内容十分丰富。其实WindowManager.java的主要内容就是由这个类定义构成。下面来分析一下这个类: 定义public static class WindowManager.LayoutPara转载 2015-11-03 23:24:11 · 2824 阅读 · 0 评论 -
Android 动画
Android 动画主要分来两类:1.tweeted 动画 , 补间动画2.frame 动画, 逐帧动画首先来说说简单的 frame by frame 动画, 这个动画实现起来很简单,但是在Android上用的不是很多, 我遇到的是在一些复杂的loading 动画时候用到frame 动画 同样可以定义在Xml中, 同样也可以在代码中写下面是在xml顶一个原创 2015-10-30 22:33:55 · 682 阅读 · 0 评论 -
ViewPager 可回收的adapter
虽说 ViewPager 以及 提供了 缓存的机制,可以通过 mViewPager.setOffscreenPageLimit(4);来设置缓存的页数当然 还有一些特殊情况 为了性能的考略, 需要 回收一些View而不是每次 缓存一页数据 都是从新加载.其实也是 模仿ListView 的 holder 来缓存View 的直接看代码吧: publ原创 2015-12-09 23:45:55 · 2545 阅读 · 0 评论 -
Android 6.0 gradle 打release包 混淆问题
最近是适配Android 6.0 的时候遇到一个打包的问题就是在打release包混淆的时候, 一直编译报错, 错误信息如下:Warning:com.google.android.gms.internal.zzac: can't find referenced class android.net.http.AndroidHttpClientWarning:com.goo原创 2015-11-16 22:28:39 · 4403 阅读 · 0 评论 -
Android 获取播放视频的相关 内容, 分辨率, 方向,作者信息
MediaMetadataRetriever retr = new MediaMetadataRetriever(); retr.setDataSource(videoPath); String height = retr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); // 视频原创 2015-12-11 19:15:13 · 18704 阅读 · 1 评论 -
Andorid 设置 自定义 字体
1. 现在吧字体读出来 放在 Application中 要整成单例模式 privatestaticTypefaceEnglishAndNumTypeface; privatestaticTypefaceChineseTypeface; publicstaticTypeface getEnglis原创 2015-12-11 19:05:15 · 542 阅读 · 0 评论 -
获取Google Play 下载 来源渠道 广告参数 相关数据
以下是模拟从google play 安装是发的广告以及渠道来源广播 (在 adb Shell 下执行)锁屏am broadcast -a com.android.vending.INSTALL_REFERRER -ncom.zuimeia.suite.lockscreen.international/com.zuimeia.suite.lockscreen.receiver.GACam原创 2015-12-11 18:46:56 · 12367 阅读 · 8 评论 -
ListView 常用属性 详解
<ListView android:id="@+id/selected_photo_recycle_view" android:layout_width="match_parent" android:layout_height="100dp" android:visibility="gone" android:layo原创 2015-12-11 18:29:46 · 1140 阅读 · 0 评论