- 浏览: 207642 次
- 性别:
- 来自: 湖南
最新评论
-
guanguoxiang:
博主 方便加一个QQ么 有个问题想请教您 qq:2691669 ...
android2.3 View视图框架源码分析之一:android是如何创建一个view的? -
zhouYunan2010:
吖龙Sam 写道博主,请问在ValueAnimator.add ...
Android Property Animation(属性动画)原理分析 -
吖龙Sam:
博主,请问在ValueAnimator.addUpdateLi ...
Android Property Animation(属性动画)原理分析 -
okwudebin:
...
android2.3 View视图框架源码分析之一:android是如何创建一个view的? -
田兴苗:
...
Android Property Animation(属性动画)原理分析
文章列表
主要为了解决在一些特殊情况下,非Android开发人员如何使用命令行去安装和卸载APP。
这里不需要安装庞大的Android开发环境,也不需要配置系统环境变量,只需要下载一个ADB工具即可实现。
1,下载ADB工具
在附件中下载即可。下载后解压到指定目录。我这里解压在D盘
2,如何使用命令行
在菜单中搜索cmd,然后打开。
然后通过命令切换到adb的解压目录
在看本文之前,可以先阅读以下官方文档关于Property Animation的一些介绍和用法,地址为http://developer.android.com/guide/topics/graphics/prop-animation.html
那么下面就来讲一下ValueAnimator和ObjectAnimator的工作原理。
1.ValueAnimator
ValueAnimator可以说是整个属性动画框架的核心类,动画的驱动就是在此类中实现的。下面举一个ValueAnimator的实例:
ValueAnimator anim= ValueAnimator.ofInt( ...
这里会以多个场景列子进行分析,在分析之前先了解一下基本的概念。
Task任务:一系列Activity的集合,这些Activity以栈的形式进行排列(后进先出)。
那在什么时候系统会新建一个Task任务呢?
...
View是所有控件的一个基类,无论是布局(Layout),还是控件(Widget)都是继承自View类。只不过layout是一个特殊的view,它里面创建一个view的数组可以包含其他的view而已。
这一篇文章把所有的layout和widget都统称为view,那么android是如何创建一个view的呢?
一。在代码中直接new出来。
比如说你要创建一个TextView的实例,那么你可以这样写:
TextView text = new TextView(c); //c为context对象,表明textview是在此对象中运行的。
二。把控件写在xml文件中然后通过Layou ...
本文将详细讲解平衡二叉树的实现原理,在阅读本文章前,我假设你已经对平衡二叉树有基本的了解,并且已经阅读了http://zhouyunan2010.iteye.com/blog/1255299关于二叉排序树的实现。
package com.utils;
import java.util.Iterator;
import java.uti ...
本文将讲述二叉排序树的插入和删除的原理及实现
package com.utils;
import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* 二叉排序树,也可以成为二叉查找树
* 它的性质如下:
* 1.若它的左子树不为空,则左子树上所有的节点均小于其根节点
* 2.若它的右子树不为空,则右子树上所有的节点的值均大于根节点
* 3.它的左右子树也分别为二叉排序树
*
* 简单起见,假设树中元素都实现了Comparable接口或者他们可以按自然顺序比较
* ...
有关堆的描述请见我另外一篇博客
http://zhouyunan2010.iteye.com/blog/1217462
/**
*
* 优先队列是用了一种叫做堆的高效的数据结构,
* 堆是用二叉树来描述的,对任意元素n,索引从0开始,如果有子节点的话,则左子树为
* 2*n+1,右子树为2*(n+1)。
* 以堆实现的队列如果不为空的话,queue[0]即为最小值。
*
* PS:此优先队列中的元素并不是升序排列的,只能说是"基本有序"
* 但是queue[0]为树根而且必定是最小元素
*/
class PriorityQueue<E> ...
LinkedHashMap是为了解决遍历Hash表的无序问题,它内部维护了一个链表用于记录你插入元素(或你访问元素的顺序)的位置,遍历时直接遍历链表,元素的顺序即为你插入的顺序,但是Entry对象要多加两个成员变量before和after用 ...
package com.sort;
/**
* 选择排序:
* 简单选择排序,树形选择排序与堆排序
*
*/
public class SelecSortDemo {
/**
* --------------------------------------------
* 简单选择排序
* 原理:假设列表中有n个元素,从第一个元素开始,在第一个元素
* 与最后一个元素之间选择一个最小的元素与第一个元素交换,
* 然后从第二个元素开始,在第二个元素与最后一个元素之间选择
* 最小的元素与第二个元素交换,以此类推,最后列表有 ...
package com.algorithm;
/**
* 插入排序及其变体
*
* List可转化为数组进行排序
* Object数组中的元素必须实现Comparable接口,即元素必须是可比的
*/
public class InsertSort {
/**
* 直接插入排序
*/
public static void insertSort(Object[] a){
Object cur = null; //保存当前遍历到的元素
int len = a.length;
for(int i = 1;i < ...
蓝牙是一种支持设备短距离传输数据的无线技术。android在2.0以后提供了这方面的支持。
从查找蓝牙设备到能够相互通信要经过几个基本步骤(本机做为服务器):
1.设置权限
在manifest中配置
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
2.启动蓝牙
首先要查看本机是否支持蓝牙,获取Bluetoot ...
1.一道简单16进制加密算法
/**
* 简单加密解密算法
* 任意十六进制字符ascii转换,转换规则:
* 当前index位置的数加上index,如果结果超出F则从0重新开始循环
* 比如: "3A4E"应该被转换为"3B61"
* 3在0位置,所以保持不变,
* A在1位置,转化为B,
* 4在2位置,转化为6,
* E在3位置,转化为1,
* 然后倒转字符,比如"3B61"转换为"16B3"
*/
public class Encryption { ...
提到哈弗曼树就必须提到节点权值,权值一般具有实际意义,比如此节点出现的概率,次数等。
必须提供权值才能构建出一棵哈弗曼树,因为哈弗曼树的定义为带权路径长度最小的二叉树。
树的带权路径长度为所有叶子节点的带权路径长度。
节点的带权路径长度为该节点到树的路径长度乘以节点权值。
哈希曼树最主要的应用是产生哈希曼编码。
为特点元素设计哈希曼编码要求二进制编码尽可能的短,并且任意一个字符的编码不是另外一个
字符的编码的前缀。
下面通过java代码构建哈希曼树与设计哈希曼编码
package com.algorithm;
/**
* 最优二叉树(哈夫曼树)
* 根据元素的权值构建 ...
为什么使用归并排序?
java中的Arrays.sort(Object[] o)是对数组进行排序,它使用的是归并排序的方式,
快速排序要比归并排序更快一些,但为什么使用归并排序了?原因是归并排序是一种稳定的排序
方式,即归并排序不交换相同的元素,这就意味着,在按一种方式排序后同时可以按另外一种
方式进行排序。比如员工可以首先按工资排序,然后按名字排序,一种排序不会打乱另一种排序
的顺序。
下面分析下sort方法的简化版:
/**
* 归并排序 (递归实现)
* 前提: 每个元素要有可比性,这里元素必须实现Comparable接口。
* 基本原理为: ...
我认为Collections类主要是完成了两个主要功能
1.提供了若干简单而又有用的算法,比如排序,二分查找,求最大最小值等等。
2.提供对集合进行包装的静态方法。比如把指定的集合包装成线程安全的集合、包装成不可修改的集合、包装成类型安全的集合等。
package java.util;
import java.io.Serializable;
import java.io.ObjectOutputStream;
import java.io.IOException;
import java.lang.reflect.Array;
public class Collecti ...