- 博客(56)
- 资源 (14)
- 收藏
- 关注
原创 Android获取view尺寸的三种方法
在oncreate()中利用view.getWidth()或是view.getHeiht()来获取view的宽和高,看似没有问题,其实它们获取到的值是0,并不是你想要的结果。这是为什么呢?因为,在调用oncreate()方法时,界面处于不可见状态,需要加载的组件还没有绘制出来,这时你是无法获取它的尺寸的。 那如何在绘制组件之前能获取到该组件的尺寸大小呢?方法1//测量int width =Vie
2016-06-21 17:33:22 4544
原创 Bitmap+android:tint
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_shortAnimTime"> <item android:state_checked="true"> <bitmap an
2016-04-08 13:40:47 1251
原创 ViewAnimator控制视图的隐藏与显示
xml代码 <ViewAnimator android:id="@+id/sample_output" android:layout_width="match_parent" android:layout_height="0px" android:layout_weight="1"> <ScrollV
2016-04-08 11:49:34 1424
原创 CardView
CardView是Android5.0之后出来的控件,它可以很方便的设置布局的圆角和阴影,从而吸引用户点击。 CardView继承自FrameLayout。主要属性如下: <declare-styleable name="CardView"> <!-- Background color for CardView. --> <attr name="cardBack
2016-04-08 11:43:56 513
原创 invalidate()与postInvalidate()
invalidate();与postInvalidate()均用来请求重绘UI,但是invalidate()方法只能在UI线程调用, postInvalidate()方法可以在非UI线程调用,代码如下:invalidate(); Handler myHandler = new Handler() { // 接收到消息后处理 public void handle
2016-02-17 15:10:39 550
原创 canvas.save()与canvas.restore()
@Overridepublic void draw(Canvas canvas) { super.draw(canvas); /*********************************************************** * canvas.save();和canvas.restore();是成对出现的,作用是用来保存画布的状态和取出保存的状态。
2016-02-17 14:58:12 538
原创 【Java进阶】-Java反射机制
一、什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息。二
2015-09-19 10:53:45 472
原创 【设计模式】-原型模式-Prototype
简介定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 原型模式(Prototype)是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何创建的细节。主要用于解决复杂对象的创建工作。Prototype类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知
2015-09-18 14:54:39 519
原创 【设计模式】-建造者模式-Builder
简介将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。建造者模式属于创建型模式。以下两种情况适合采用建造者模式:1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。2)当构造过程必须允许被构造的对象有不同表示时。角色在建造者模式中,有以下几个角色:Builder:接口,规定建造一个对象需要建造哪几部分。Concret
2015-09-18 09:36:38 417
原创 【设计模式】-简单工厂模式-SampleFactory
简介简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式。角色抽象产品多个具体产品工厂使用示例抽象产品–汽车// 抽象产品interface ICar { void printBrand();}具体
2015-09-17 20:58:34 674
原创 【设计模式】-抽象工厂模式-AbstractFactory
简介抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。当有多个抽象产品时,选用抽象工厂模式。它能够为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。角色多个抽象产品每个抽象产品又有多个具体产品一个抽象工厂多个具体工厂使用示例抽象产品1–键盘interface IKeyboard { void input();}抽象产品2–鼠标interface
2015-09-17 20:31:02 437
原创 【设计模式】-工厂方法模式-Factory Method
简介工厂方法模式(Factory Method)是一种常用的对象创建型设计模式,此模式的核心精神是封装类中不变的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建。角色抽象工
2015-09-17 16:12:03 475
原创 【设计模式】-单例模式-Singleton
简介单例模式:是一种常用的软件设计模式。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。实现方式方式一package org.iti.designmode;public class SingleInstance { private SingleInstance() {
2015-09-17 15:16:03 416
原创 【Java多线程】-原子类型-java.util.concurrent.atomic
前言在JDK5新增的并发包中有这样一个包:java.util.concurrent.atomic,该包是对Java部分数据类型的原子封装,在原有数据类型的基础上,提供了原子性的操作方法,保证了线程安全。Compare And SwapCAS 指的是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。这个指令会对内存中的共享数据做原子的读写操作。其操作过程如下: CPU 会
2015-09-17 11:25:00 452
原创 【Java多线程】-Condition使用(生产者-消费者)
首先看一个使用Condition的简单示例package org.iti.thread;import java.util.ArrayList;import java.util.List;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.conc
2015-09-17 08:48:03 530
原创 【Java多线程】-读写锁ReadWriteLock
大家可能遇到这样的情况:在读写共享数据时,要求写入与写入互斥,读取与写入互斥,而读取和读取不要求互斥。我相信大家都知道需要加锁来实现互斥,但是普通的锁能达到我么的要求吗?我们来看看下面的代码:package org.iti.thread;import java.util.Random;public class ThreadReadWriteLock { public static void
2015-09-16 16:54:37 573
原创 【Java多线程】-ReentrantLock
ReentrantLock 简介java.util.concurrent.lock 中的 Lock 框架是锁定的一个抽象,它允许把锁定的实现作为 Java 类,而不是作为语言的特性来实现。这就为 Lock 的多种实现留下了空间,各种实现可能有不同的调度算法、性能特性或者锁定语义。 ReentrantLock 类实现了 Lock ,它拥有与 synchronized 相同的并发性和内存语义,但是添加
2015-09-16 16:12:27 456
原创 【Java多线程】-Callable,Future,FutureTask
一、Callable与Runnable的区别1)Runnable是一个接口,里面只申明了一个run()方法,run()方法的返回值为void类型,因此,任务执行完后不会返回任何结果。public interface Runnable { public abstract void run();}2)Callable也是一个接口,里面也只申明了一个方法call(),该方法的返回值类型为一个泛型
2015-09-14 10:27:17 467
原创 【Java多线程】-线程池
创建线程池使用线程池处理多线程可以节约资源,以更小的开销做更多的事,从而提高性能。自JDK5之后,Java推出了一个并发包,java.util.concurrent,接下来咱们看看在Java并发包下如何创建线程池。 // 创建可重用-固定线程数目的线程池 ExecutorService fixedThreadPool = Executors.newFixedThread
2015-09-12 15:24:44 456
原创 【Java多线程】-Timer,TimerTask,ScheduledExecutorService
Timer和TimerTaskTimerTask是一个抽象类,实现了Runnable接口,所以它具备了多线程的能力; Timer可以看成是一个定时器,用于调度TimerTask执行,一个Timer可以调度任意多个TimerTask,它会将TimerTask存储在一个队列中,顺序调度。Timer源码:public class Timer { /** * The timer task
2015-09-12 10:56:45 726
原创 【Java多线程】-线程中断
涉及到线程终端的方法有以下三个:public voidinterrupt ():将线程的中断状态设置为true;public static boolean interrupted():判断当前线程的中断状态;public boolean isInterrupted():判断某个线程的中断状态package org.iti.thread;
2015-09-12 09:30:10 404
原创 【Java多线程】-生产者与消费者
场景:有一个盘子,最多可放4个苹果。生产者往盘子里放苹果,若盘子满则生产者等待,否则放入一个苹果,并通知消费者消费;消费者从盘子里取走苹果,盘子空消费者等待,否则取走一个苹果,并通知生产者可以继续放苹果。package org.iti.thread;import java.util.ArrayList;import java.util.List;public class ThreadDemo
2015-09-11 21:37:10 534
原创 【Java多线程】-线程同步synchronized和volatile
前言1) 多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现。 2)程序的主内存是多个线程共享的,每个线程都有自己的工作内存,工作内存中存储了主内存某些对象的副本。 3)原子性:系统提供的原子性操作包括:lock,unlock,read,load,use,assign,store,write。 4)线程操作共享变量的执行顺序第一步:read,load,将共享变量加载到
2015-09-11 20:26:23 596
原创 【Android基础】-View.MeasureSpec
简介MeasureSpec封装了父元素对子元素的布局要求。MeasureSpec对象代表了对宽或者高的布局要求,它由大小(size)和模式(mode)组成,有如下三种模式:UNSPECIFIED:父元素对子元素没有限制,子元素能获得想要的任何大小;EXACTLY:父元素决定子元素的尺寸,而不管子元素的实际尺寸;AT_MOST:父元素决定子元素的尺寸上限。方法public static in
2015-09-06 13:49:55 480
原创 【Android基础】-Activity启动模式详解
引言Activity有四种启动模式standard(默认),singleTop,singleTask,singleInstance,相信大家都知道,但是它们之间到底有什么区别可能还是有些人说不太清楚,本文将就这四种启动模式的区别做简单的介绍,然后通过实验验证咱们的结论。四种启动模式介绍一、standard, standard是Activity默认的启动模式,如果在AndroidManifest.x
2015-09-05 16:16:25 445
原创 【Android进阶】-Android组合的方式自定义控件
引言在软件开发过程中,大家可能都发现了这个问题,就是软件的标题栏样式几乎都是一样的,只是文字不同而已,就像下面的两张图片一样。为了减少重复代码,提高效率,同时也方便大家使用,咱们可以把标题栏通过组合的方式定义成一个控件。 实现步骤步骤一:在values-attrs中定义控件要用到的属性,如下面的代码所示。这里我们定义了标题栏文字(textText),字体大小(textSize),字体颜色(text
2015-09-05 12:04:17 461
原创 【Android进阶】-Android ORM数据库框架 ActiveAndroid入门
ActiveAndroid是一个开源的轻量级ORM框架,源码可以在github上下载,下载地址:https://github.com/pardom/ActiveAndroid 大家可以下载源码自己编译生jar,也可以下载编译好的jar包,下载地址:activeandroid-3.1-beta.jar配置在AndroidManifest.xml中配置以下两个meta标签,AA_DB_NAME标签对应
2015-09-04 20:46:44 501
原创 【Android进阶】-Android 网络通信框架 Volley
引言在Volley出来之前,我们在程序中需要和服务器通信时,使用的通常是HttpURLConnection,HttpClient或者在这两个的基础上封装的框架。Volley是谷歌发布的Android平台上的网络通信框架,它能够使Android平台上的网络通信更快,更简单,更健壮。Volley提供的功能JSON,图像等的异步下载;网络请求的排序;网络请求的优先级处理缓存多级别取消请求和Ac
2015-09-04 14:59:39 638
原创 【Android基础】-基于Apache HttpClient封装的网络操作工具类
引言Http协议的重要性不用多说了,HttpClient相比传统JDK自带的URLConnection,增加了易用性和灵活性,提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,使客户端发送Http请求变得容易。我们需要用到两个jar包:httpmime-4.3.5.jar,httpcore-4.3.2.jar 下载地址:httpmime-4.3.5.jar,httpcore-4.3
2015-09-03 13:56:40 962
原创 【Android基础】-调用前置摄像头实现的‘手机镜子’
前言:镜子是每个爱美的人必备的物品,但是并不是什么时候都带在身边;手机也是每个人必备的物品,而且随身携带,甚至连上厕所都不愿放下;那么是不是可以想办法让手机具有镜子的功能呢?今天我们就来通过调用摄像头实现一款手机镜子,去掉手机照相机界面上多余的设置部分,带给大家一个干干净净的原生的镜子。主要代码如下:package com.tailyou.mirror;import java.io.IOExcept
2015-09-02 19:51:07 3910
原创 【Android进阶】-AIDL使用解析
Android系统中,各应用程序都运行在自己的进程中,通常情况下,各进程之间无法直接进行数据交换。为了实现这种跨进程通信(InterProcess communication,简称IPC),Android提供了AIDL Service。一、AIDL Service简介Android的远程Service调用与Java的远程方法调用(RMI)基本相似,都是先定义一个远程调用接口
2015-09-01 12:51:28 524
原创 【Android基础】-Service组件使用详解
Service是Android四大组件之一,它与Activity的区别是:它一直在后台运行,没有前台界面。一旦Service被启动起来后,他就跟Activity一样,完全具有自己的生命周期。一、创建Service,定义一个继承Service的子类Service中定义了一系列生命周期方法,如下:IBinder onBind(Intent intent):该方法是Servi
2015-08-29 20:22:17 897
原创 【福利】-Android开发常用工具类
福利!!大家都知道,代码写多了,最值钱除了开发经验,还有积累的一票工具类。 目录如下: cddn下载地址:http://download.csdn.net/detail/tailyou/9054485 github地址:https://github.com/Tailyou/AndroidUtils.git
2015-08-27 15:53:05 915
原创 【加密解密】-AES加密解密实现
先看实现效果,测试代码如下:package org.iti.algorithm;public class AESDemo { public static void main(String[] args) { // 明文 String mingWen = "zhuwenfei"; // 密钥 String pwd = "123";
2015-08-27 14:24:20 4231
原创 Github for Windows2.0使用详解
一、下载下载地址:https://windows.github.com/ 二、安装下载完成后,会得到一个可执行文件,下图中圈起来的那个; 双击GitHubSetup.exe安装,默认安装就行,安装完成后会在桌面上生成两个图标,GitHub是图形界面模式,Git Shell是命令行模式。 三、注册Github账号 注册地址:https://github.com/ 四、图形界面的使用1)登录
2015-08-27 11:40:21 2109
原创 【数据结构】-快速排序Java实现
快速排序是对冒泡排序的一种改进。 基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,然后递归对这两部分记录进行排序,最终达到整个序列有序。 稳定性:不稳定; 时间复杂度:O(logn)-O(n*n)package org.iti.algorithm;import java.util.Random;/** * * @author Tail
2015-08-26 17:52:51 426
原创 【数据结构】-直接插入排序、希尔排序Java实现
直接插入排序:将一个记录插入到已排好的有序序列中,从而得到新的、记录数加1的有序序列。 稳定性:稳定; 时间复杂度:O(n*n)希尔排序:先将整个待排记录分成若干子序列分别进行直接插入排序,待整个序列中的记录基本有序时,再对全体记录进行一次直接插入排序。 稳定性:不稳定; 时间复杂度:O(nlogn)~O(n*n)package org.iti.algorithm;import java.u
2015-08-26 17:34:32 501
自定义相机实现的手机镜子
2015-09-02
Android AIDL Demo
2015-09-02
apktool反编译工具
2013-10-09
基于openfire XMPP的即时通讯客服端
2013-09-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人