深入探讨Android异步精髓Handler

Google采用Handler把主线程和子线程精巧地联系起来——子线程中进行耗时的业务逻辑,然后利用Handler通知主线程刷新UI。其实,在AsyncTask和IntentService的内部亦使用了Handler实现其主要功能。抛开这两者不谈,当我们打开Android源码的时候也随处可见Handler的身影。所以,Handler是Android异步操作的核心和精髓,它在众多领域发挥着极其重要甚至是不可替代的作用。...
阅读(16622) 评论(38)

站在源码的肩膀上全解Scroller工作机制

在Android中我们常见到的ListView、Launcher、SlidingMenu、ViewPager等等这些具有弹性滑动的View的背后都隐藏着一个机智又乖巧的小精灵——Scroller。这些控件的使用场景和作用各不相同,但在它们的内部均广泛又深刻地使用了Scroller的scrollTo()和scrollBy(),如此的实现不但丰富了操作方式而且极大提升了用户体验。...
阅读(15431) 评论(29)

Android多分辨率适配框架(1)— 核心基础

Android的源码公开策略丰富了手持设备的多样性,但随之而来的却是较为严重的"碎片化"——版本繁多、尺寸多样、功能定制。在Android项目开发中,软件工程师都会面临一个问题:如何适配多不同分辨率的设备? 许多人采用的是这样的方式:利用不同的dimens和drawable资源适配不同分辨率的设备。这么做当然没错,可是它也同时带来一些弊端............
阅读(16349) 评论(32)

[置顶] 推翻自己和过往,重学自定义View

关于自定义View以前看了很多资料看,从博客园到CSDN,从stackoverflow到EOE论坛,从百草园到三味书屋,搜了一大筐,沮丧的发现这些文章大同小异:只举个简单的例子,很少研究为什么;人云亦云,文章里的内容根本没有去验证和深究就发出来了;或者避重就轻展示简单的Demo直接把难点给绕过去了;文章零零散散不成体系……每次看完这些文章觉得还是晕头转向,稀里糊涂,原本就不多的学习动力和勇气也消失殆尽了。...
阅读(25073) 评论(64)

自定义View系列教程08--滑动冲突的产生及其处理

在之前的几篇文章中,我们已经分析了View对于Touch的处理以及ViewGroup对于Touch事件的分发。但在开发中时常遇到一个棘手的问题:Touch事件的滑动冲突。比如ListView嵌套ScrollView,ViewPager嵌套ScrollView,ListView嵌套ScrollView时常常发生。 这些滑动冲突的产生,一般而言都具有以下特点: 子View和父View都有滑动的需...
阅读(9117) 评论(34)

自定义View系列教程07--详解ViewGroup分发Touch事件

在上一篇中已经分析完了View对于Touch事件的处理,在此基础上分析和理解ViewGroup对于Touch事件的分发就会相对容易些。 当一个Touch事件发生后,事件首先由系统传递给当前Activity并且由其dispatchTouchEvent()派发该Touch事件,源码如下: public boolean dispatchTouchEvent(MotionEvent ev) {...
阅读(14133) 评论(47)

自定义View系列教程06--详解View的Touch事件处理

在之前的几篇文章中结合Andorid源码还有示例分析完了自定义View的三个阶段:measure,layout,draw。 在自定义View的过程中我们还经常需要处理View的Touch事件,这就涉及到了大伙常说的Touch事件的分发。其实,这一部分还是有些复杂的,而且有的地方不是很好理解,尤其是对于刚上路的新司机来说经常理不清楚,欲求不满,欲罢不能——想搞懂却又觉得难,想放弃又觉得舍不得。 好吧,我也经历过这些痛...
阅读(14091) 评论(24)

自定义View系列教程05--示例分析

之前结合源码分析完了自定义View的三个阶段:measure,layout,draw。 那么,自定义有哪几种常见的方式呢? 直接继承自View 在使用该方式实现自定义View时通常的核心操作都在onDraw( )当中进行。但是,请注意,在分析measure部分源码的时候,我们提到如果直接继承自View在onMeasure( )中要处理view大小为wrap_content的情况,否则这种情...
阅读(18602) 评论(56)

自定义View系列教程04--Draw源码分析及其实践

通过之前的详细分析,我们知道:在measure中测量了View的大小,在layout阶段确定了View的位置。 完成这两步之后就进入到了我们相对熟悉的draw阶段,在该阶段真正地开始对视图进行绘制。按照之前的惯例,我们来瞅瞅View中draw( )的源码 public void draw(Canvas canvas) { final int privateFlags = mPriv...
阅读(21707) 评论(32)

自定义View系列教程03--onLayout源码详尽分析

在经过measure阶段以后,系统确定了View的大小,接下来就进入到layout的过程。 在该过程中会确定视图的显示位置(即子View在其父控件中的位置)。 嗯哼,我们直接扒开源码从View的layout( )开始入手。 //l, t, r, b分别表示子View相对于父View的左、上、右、下的坐标 public void layout(int l, int t, int r, in...
阅读(20461) 评论(33)

自定义View系列教程02--onMeasure源码详尽分析

大家知道,自定义View有三个重要的步骤:measure,layout,draw。而measure处于该链条的首端,占据着极其重要的地位;然而对于measure的理解却不是那么容易,许多问题都是一知半解,比如:为什么父View影响到了子View的MeasureSpec的生成?为什么我们自定义一个View在布局时将其宽或者高指定为wrap_content但是其实际是match_parent的效果?子V...
阅读(31340) 评论(90)

自定义View系列教程01--常用工具介绍

在自定义View的时候,常常会用到一些Android系统提供的工具。这些工具封装了我们经常会用到的方法,比如拖拽View,计算滑动速度,View的滚动,手势处理等等。如果我们自己去实现这些方法会比较繁琐,而且容易出一些bug。所以,作为自定义View系列教程的开端,先介绍一下这些常用的工具,以便在后续的学习和工作中使用。...
阅读(36285) 评论(57)

仿QQ获取设备中APK并分享

我和郭霖13年,郭霖开始写技术博客。我在CSDN的博客频道逛着玩,刚好看到他的文章,于是点击进去阅读。看完之后最大的感受就是:代码整齐,技术深厚;文章写得图文并茂,有条有理。从那时起,我就成了郭霖的一个粉丝,每周四早晨都等着看他的更新。诚实地说:没有脑残地追过星,但这么实在地喜欢看一个人写的技术博客,这还是头一回。其实,从他每篇文章的点击量和评论数也可以看出:大家对郭霖非常的认可。他也常出现在CSD...
阅读(18130) 评论(11)

Android官方底部Tab栏设计规范

上一篇《仿微信底部Tab栏》中粗略的讲了下底部Tab栏的封装,不少同学在实际运用中发现了一些问题,比如我demo中的title用了actionbar,所以如果新建的Activity的Theme不包含actionbar就回出现空指针;再比如假如底部的Tab对应的并不全都是Fragment,而是一部分Fragment,一部分Activity,就不适用了,但办法总比困难多,这个也是可以解决的;还有一个很常...
阅读(20036) 评论(2)

封装实践——打造微信底部tab栏

目前市面上很多App都采用底部一个Tab栏,管理四到五个Tab,然后选择切换页面的方式的设计,这虽然不太符合metro design,但确是一个不容易出错而又符合国人使用习惯的设计方式。比如微信,支付宝,网易新闻,简书等都采用这种设计。而所谓封装一定是基于某种确定的业务需求,所以针对上述的通用设计方式,我们可以做一个比较理想化的封装。 为什么要做封装 你可能会觉得,这就是一个选择切换嘛,我只要做...
阅读(10615) 评论(3)

利用ActivityLifecycleCallbacks判断APP是否在后台运行

利用ActivityLifecycleCallbacks判断APP是否在后台运行(附源码)...
阅读(11834) 评论(5)

View的draw过程源码分析

/** * * 原创作者: * 谷哥的小弟 http://blog.csdn.net/lfdfhl * * 文档描述: * View的draw过程源码分析 * * 绘制过程分为六步: * * 1. Draw the background * 2. If necessary, save the canvas' layer...
阅读(1395) 评论(0)

Android使用ViewPager实现无限循环滑动及轮播(附源码)

MainActivity如下: package cc.ww; import java.util.ArrayList; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Messag...
阅读(8090) 评论(1)

自定义可折叠和展开的View

CollapseView如下: package com.ww.collapseview; import android.annotation.SuppressLint; import android.content.Context; import android.text.TextUtils; import android.util.AttributeSet; import android.vi...
阅读(3966) 评论(3)

View的Layout过程源码分析

/** * 文档描述: * View的Layout过程源码分析 * * 原创作者: * 谷哥的小弟 http://blog.csdn.net/lfdfhl * * 分析笔记: * View在经历过第一阶段的measure之后,进入到第二阶段layout. * 该阶段的目的是 * (1)设置View自身的大小和位置. * (2)设置View的子View...
阅读(1307) 评论(0)
43条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:1730506次
    • 积分:24554
    • 等级:
    • 排名:第245名
    • 原创:770篇
    • 转载:0篇
    • 译文:1篇
    • 评论:1093条
    博客专栏
    开发交流


    为方便大家学习和交流Android开发,建了个群,欢迎大家加入。

    QQ群: 183899857

    文章分类