2015-02-01 码农明明桑
视图动画(View Animation),又称补间动画(Tween Animation),即给出两个关键帧,通过一些算法将给定属性值在给定的时间内在两个关键帧间渐变。本文首先讲解各种基本动画的使用,其实介绍View动画的工作过程。 概述 视图动画只能作用于View对象,是对View的变换,默认支持的类型有: 透明度变化(AlphaAnimation) 缩放(ScaleAnimation) 位移(TranslateAnimation) 旋转(RotateAnimation) 可以使用AnimationSet让多个动画集合在一起运行,使用插值器(Interpolator)设置动画的速度。 more 上面说到的几种动画,以及Ani 继续阅读 »
2015-09-17 ZhangTitanjum
上一篇介绍了150行代码实现滑动退出功能,相对来说比较简单,那么这篇文章稍微复杂点,有350行代码。 1. CircleImageView:继承系统的View,重写系统的方法; 2. 自定义style属性:供使用者在xml文件中配置,方便使用; 有多么好用就不罗嗦了(我左侧的头像就是),直接上代码: more ```java public class CircleImageView extends ImageView { private static final ScaleType SCALE_TYPE = ScaleType.CENTER_CROP; private static final Bitmap.Co 继续阅读 »
2017-08-12 Lauzy
最近想写个音乐播放器,偶然看到轻听这款播放器的播放和暂停按钮,在切换过程中的动画很是吸引我。本着造轮子(其实是 github 上边没找到)的想法,就花了点时间撸出来了这个效果。 效果就是下边这个样子: more 下边说下实现方法,中间也踩了一些坑。 测量及初始化 首先要确实View的宽高,在这里由于是圆形按钮,所以设置宽高相等,onMeasure()方法中设置下即可: ```java mWidth = MeasureSpec.getSize(widthMeasureSpec); mHeight = MeasureSpec.getSize(heightMeasureSpec); int widt 继续阅读 »
2016-07-14 JustWe
动态ID? xml 我们最习惯的ID设置方式大概就是这样了,在xml中直接使用android:id为一个View添加ID。但是这并不能解决所有的问题,我们有很多的View都是动态创建,还有的是自定义控件生成的,例如我们要在代码里实现相对布局,那我们就必须拿到相对的基准View的ID,但是这样就没办法直接使用xml进行定义了。 不过我想大家都知道就想我们通常能够用view.getId()一样获取到View的ID,我们也能够用view.setId(int id)来为View设定ID。不过这就出现了一个很严重的问题ID是个int类型的数字,那我们什么都可以设置吗? ID的使用方式 继续阅读 »
2017-01-19 Piasy
View 树的绘图流程 当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 framework 处理。 整个 View 树的绘图流程在ViewRoot.java类的performTraversals()函数展开,该函数所做 的工作可简单概况为是否需要重新计算视图大小(measure)、是否需要重新安置视图的位置(layout)、以及是否需要重绘(draw),流程图如下: 继续阅读 »
2016-09-06 JustWe
作者:刘丰恺 作者博客:若梦浮生 转载请注明文章来源 我们在开发自定义控件的时候经常会有这样的需求,一个控件既需要能够被拖拽,也需要能够被点击。其实这个需求有个矛盾之处,需要被拖拽就要复写onTouch(...)函数,但是这样点击事件就被覆盖了,正常的 onClick() / onLongClick()事件是不能被响应的了。 现在面对这种情况GestureDetector,ViewDragHelper能为我们的开发提供一些便利,但是有的情况下这些封装的工具类没办法很好的满足我们的需求,这时候我们就需要自己来模拟View的点击事件。 模拟View点击事件说起来也很简单,说白了就是获 继续阅读 »
2015-05-08 党洁
list view 应该注意的地方 利用好 convertView 来重用 View,切忌每次 getView() 都新建。ListView 的核心原理就是重用 View。ListView 中有一个回收器,Item 滑出界面的时候 View 会回收到这里,需要显示新的 Item 的时候,就尽量重用回收器里面的 View。 利用好 View Type,例如你的 ListView 中有几个类型的 Item,需要给每个类型创建不同的 View,这样有利于 ListView 的回收,当然类型不能太多; 实现多个不同ITEM类型 也主要是使用 adapter中得 getViewTypeCount 和 getItemViewType 3 . 继续阅读 »
2016-01-18 Piasy
今天迷迷糊糊听见iOS同事对PM说“连击检测”其实只需要传一个参数就行了,我大为震惊,iOS竟有如此炫酷的API,Android似乎没有呀!在google和github搜索两次之后无果,我决定自己实现一个连击检测的库。因为主要使用RxJava实现,所以命名为RxComboDetector,github 源码地址。 继续阅读 »
2016-09-13 码农明明桑
Android N 正式版已经发布了。对于开发者来说一个重大的更新是对于Java支持到了Java8,其中一点就是支持Lambda。我们就来聊聊什么是lambda,怎么在Android中使用。 什么是lambda Lambda 可以理解为匿名函数,帮助我们写出更加简洁的代码。 more 给view设置一个clicklistener,原本你需要写出这样的代码: java v.setOnClickListener(new View.OnClickListener(View v) { @Override public void onClick(View v) { Toast.makeText(getActivity(), "c 继续阅读 »
2015-11-13 Oliver Wang
前言 今天研究了好久的 Backbone,一直搞不明白,怎么通过 router 的改变来切换 view。 过程跌宕起伏 事情是这样的,都知道 backbone 有 model, collection, view, router 这些基本概念,今天我要写一个简单的网页,有两个 nav 项,因为用了 backbone,自然就想到了单页应用,就是单击其中某一个的时候,显示这一个 nav 项对应的内容。 这就用到了 router 的事件,每当 router 改变时,重新 render 整个页面。(我是这么想的,也不是整个,router 变了有些内容必然会跟着变。) js var appView = this; Backbone.h 继续阅读 »