自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 问答 (1)
  • 收藏
  • 关注

原创 MediaCodec解码aac

上一篇博文介绍了如何用MediaCodec进行aac编码,这篇介绍如何解码,在解码上要注意的点是解码时要一帧一帧的喂给解码器而且得带adts头,另外要将头一帧的两个特殊字节用来对解码器进行配置,解码出来就是pcm编码的音频数据了,可以直接将pcm数据写进AudioTrack进行播放。/** * @author zhangsutao * @file AudioDecoder * @brie

2016-08-25 21:41:18 4694 3

原创 MediaCodec编码aac

我们可以用AudioRecoder对音频进行采集,采集的音频是pcm编码的原始数据,通过MediaCodec编码成aac音频,这里要注意的是编码出来是aac裸流,是无法播放的,要播放的话必须在每一帧音频前加adts头,adts头包含音频数据的采样率,升到,帧长度等信息,必须有adts头才可以正确解码。还有就是编码时出来的第一帧是一个两个字节的数据,这个数据也是比较特殊的需要用来在解码时配置解码器,

2016-08-25 21:32:48 3496 1

原创 MediaCodec解码h264流

上一篇博文介绍了如何用MediaCodec进行h264编码,这篇介绍如何用MediaCodec进行h264解码,解码时要注意的点就是要一帧一帧的喂给解码器,编码器是一帧一帧出数据的,网上有些demo居然拿一个定长的数组取数据喂给编码器(奇怪的是他居然说可以),还有就是要将sps和pps配置给解码器。另外MediaCodec可以将解码后的数据直接输出到一个Surface显示出来,我就是用一个Surf

2016-08-25 21:24:21 9515 4

原创 MediaCodec硬编码成H264视频流

android提供了一个强大的编解码类MediaCodec,可以实现对视频数据的编解码,下面讲一下如何对原始视频数据硬编码成h264格式的流MediaCodec提供两种方式的输入,一种是将数据写入它的输入缓冲队列里,一种是让MediaCodec建立一个输入Surface,MediaCodec会自动从这个输入Surface中读取数据,因为我做的是录制屏幕的需求,所以我是使用一个Surfa

2016-08-25 21:10:30 8760 10

原创 OpenGL texture黑边问题

用OpenGL的粒子系统制作一个动态滤镜时发现纹理被绘制成下面这样的效果: 而我的原图是可以看到花瓣的周围都黑了一圈最后发现是混合模式的问题,之前采用的混合模式是GLES20.glEnable(GLES20.GL_BLEND);GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);

2016-06-21 13:37:06 4656 1

原创 皮肤亮白白——美颜算法

找到第一份实习,老大给我的第一个任务是实现美颜功能,网上找了一大堆资料,总的来说美颜的实现的步骤是:1.用具有保边效果的滤波算法对图像进行模糊处理2.用肤色检测算法保护非皮肤区域3.将模糊后的图像和原图进行图像融合4.对融合后的图像进行锐化处理对于步骤一,该滤波算法可以选择双边滤波,导向滤波,表面模糊等,只要能保边缘就行,高斯模糊是不行的,色斑逗逗就是在这一步磨掉的哈哈

2016-04-07 19:42:32 21157 15

原创 Java中的枚举类

Java枚举类1 在java中枚举用enum关键字来声明,定义格式为enum size{Small,MIDDLE,LARGE,EXTRA

2016-03-26 19:12:18 395

原创 Java对象初始化

最近刷面试题发现关于java 中new对象时构造函数,构造代码块等的调用顺序是常考点,下面的一些总结:请看下面的demo程序:public class Father { public static Variable a=new Variable(); public Variable b=new Variable(1); static{ System.out.p

2016-03-26 19:11:09 348

原创 单例模式写法

1.懒汉,线程不安全public class Singleton { private static Singleton instance=null; private Singleton(){ } public static Singleton getInstance(){ if(instance==null) instance=new Singleton(); r

2016-03-05 17:45:48 251

原创 Android内存优化—SparseArray和ArrayMap

在开发过程中,如果要使用键值对的方式来存储数据时,我们首先会想到的是HashMap,但了解HashMap的内部结构的话就知道,HashMap是比较消耗内存的,所以Android推出了SparseArray和ArrayMap来优化存储。让我们首先来看一下HashMap的存储结构,其实HashMap内部是一个哈希表,而且采用分离链表法来解决哈希冲突的问题,如下图另外HashMa

2016-03-05 15:46:20 398

原创 Application类使用笔记

Application是android app中的一个组件,当android程序启动时系统会创建一个Application对象。android系统会为每一个app默认创建一个applicaiton而且只有一个applicaiton,所以applicaiton是单例的。通常我们不需要自己定义application,若你要Applicaiton中部署一些全局的东西或者为了方便的获得Context,那么

2016-03-05 14:38:16 504

原创 Http协议学习笔记

Http(超文本传输协议)是Web服务器和客户端之间传输信息所用的协议,它运行在Tcp上。  在早期的Http1.0中,Tcp连接建立之后浏览器只发送一个请求,之后一个响应消息被发回来,在然后TCP连接就被释放了。但那是Web页面只包含Html文本,因此这样设计也够用,但后来Web页面发展成有大量图片以及其他精美的东西,这样的设计就导致了效率低下。为解决Http1.0效率低的问题,Http

2016-03-01 22:50:54 407

原创 自定义布局之宽高比布局的实现

最近在项目中遇到一个屏幕适配的问题,在显示图片时我在布局中宽度和高度都设置了固定的dp值,但当app运行在一些屏幕比较宽的手机上时,会出现图片宽高比不对情况,因为宽屏的手机横向的像素密度比较大,为此在网上找到一个解决方案是,定义一个可以根据图片本身宽高比来设置控件宽高的布局。实现如下首先声明两个属性,一个是picRatio表示图片的宽高比,一个是relative表示要根据宽度按比例确定高度,还

2016-02-29 09:07:08 908

原创 json解析之gson解析

我们知道在json中的两个基本结构是数组和对象,数组以[]括起来,数组里的值可以是数字、字符串、数组、对象几种;对象以{}括起来,对象中的数据是以键值对的形式出现的,键名就是属性名,键值就是属性值,属性值的类型可以是 数字、字符串、数组、对象几种。如果解析的json是一个对象,那么我们建一个这样的类并以键名作为属性名类型为属性值类型。如果属性值是一个数组,那就建立一个List属性,例如下面

2016-02-29 08:07:41 733

原创 两张图让你看懂事件派发机制

首先是ViewGroup的事件派发下面是View的事件派发机制

2016-02-28 00:24:10 1649

原创 Andorid 内容观察者的使用

ContentObserver的作用是监听特定uri的数据库的变化,从而可以及时的对数据进行处理用法:你需要注册内容观察者,调用如下代码: public final void registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer)当你不需要监听内容时,调用

2016-02-26 22:00:17 372

原创 程序锁的实现

许多安全软件都提供了程序锁服务,打开加锁的程序时必须正确输入密码才能够进入程序,那么如何实现程序锁呢?程序锁基本原理就是监控Activity的任务栈,核心方法如下:private void appLock() { // TODO Auto-generated method stub new Thread(new Runnable(){ @Override

2016-02-26 20:50:07 1296

原创 SurfaceView原理与使用

SurfaceView内嵌了一个专门用于绘制的surface,你可以控制它的大小。他与普通的View的最大的不同之处在于,它可以在非ui线程中绘制图像。因此用SurfaceView绘制图形不用考虑主线程过于繁忙而无法处理其他东西(ANR)的问题,从而可以获得更高的帧率,降低主线程的负担。用法:首先继承SurfaceView并实现SurfaceHolder.Callback接

2016-02-23 15:48:01 1488

原创 android屏幕适配

1 .设备像素适配单位介绍:px,pt,dp,sp,dpidpi:像素密度,它指的是屏幕每英寸所包含的像素数,它的算法是:屏幕对角线上的像素数量/屏幕对角线长(英寸)例如:手机分辨率是320*480,屏幕宽是2英寸,长3英寸,那么用勾股定理算出对角线的像素数量和长,最后结果是160dpipx:是像素的意思,即屏幕中可以显示的最小元素单元。pt:是磅数的意思,一磅等于1/72英寸

2016-01-05 10:15:07 351

原创 Android性能优化----图片三级缓存

当我们在app中加载大量的图片时,稍有不注意就容易出现OOM异常,为了避免出现这样的问题并保证好的用户的体验,做好缓存是非常重要,下面介绍如何为图片做三级缓存,所谓三级缓存是指在文件和内存中都做缓存,所需的数据首先从内存中做的缓存中取,当内存中没有缓存时再从文件中的缓存取,当文件中的缓存也没有时,就通过网络访问服务器取并在取到数据后,在内存和文件中都做一个缓存。在内存中的缓存我们使用LruCa

2016-01-03 19:47:17 483

原创 自定义Toast的实现

Toast在我们的应用开发中是最常见不过的控件了,系统默认的控件样式固定,如果要做出比较炫的Toast就需要自定义Toast了。用过腾讯手机管家的朋友一定不会忘了那个在主界面可以发射的小火箭:其实这就是一个自定义的Toast。下面将讲述自定义Toast的方法。首先分析系统Toast的实现:在Toast中有一个叫TN的内部类,它的构造函数如下: TN() {

2015-12-18 17:02:55 643

原创 笔记本电脑做服务器供Android手机访问

在做一些网络应用的时候,需要访问服务器获取内容,你可能会说没有服务器该怎么办?怎么调试?以下几步教你解决:1 在电脑上下载Tomcat服务器,并开启,关于Tomcat的用法就不多说了。2 在windows控制台输入ipconfig获取电脑的ip地址,比如我的电脑ip是:192.168.199.383 用360免费wifi之类的软件,使笔记本放出wifi信号,并让手机连接(注

2015-12-18 15:22:36 1486

原创 Android自定义属性

在自定义控件时,有时候会用到自定义属性,那么如何自定义属性呢?步骤如下:1.在res/values中创建attrs.xml文件,代码如下: 在上面的代码中,创建了两个自定义的属性分别是"title"和”content“,它们的值得类型是字符串。2,在要使用自定义属性的xml文件中,声明自定义命名空间,代码如下:<Linea

2015-12-18 14:52:23 441

原创 通过aidl实现挂断电话

如何实现挂断电话?在安卓1.5版本以前,TelephonyManager 类有一个endCall方法可以直接调用就可以实现挂断电话的功能了,不过在这之后出于安全考虑,这个方法被阉割了。那么在1.5之后要如果要实现自动挂断电话,就必须通过aidl来实现,其实1.5之前endCall方法也是通过这样实现的。在TelephoneManager的源代码中有一个方法如下:private ITelephony

2015-12-18 14:00:49 650 2

原创 弹出窗体PopupWindow的使用

PopupWindow,也就是弹出窗体,是我们在许多app常见的一种界面形式,在弹出的窗体的中可以显示任意的ui控件,并且可以在屏幕的任意位置显示,非常的灵活。下面是使用popupWindow的一些主要步骤:1 在res/layout目录下定义一个你想在PopupWindow中显示的界面,如下:<LinearLayout xmlns:android="http://schemas.andr

2015-12-14 16:55:10 665

翻译 定制控件Custom Components

基于两个基础的类:View和ViewGroup,Android提供了一个精致而强大的组件化的用户界面。此前,Android平台预先提供了各种各样的View和ViewGroup的子类——被称作widgets和layouts。当然你也可以单独的构建你自己的ui。可用的widgets包括  Button, TextView, EditText, ListView,CheckBox, RadioBut

2015-10-04 15:29:25 444

翻译 Connectivity-----Wi-Fi Peer-to-Peer

Wifi peer-to-peer允许Android 4.0(API level14)或以后的拥有wifi硬件的设备通过wifi直接互相连接,而不用中间媒介(Android的wifi P2p框架符合wifi联盟的认证计划)。通过使用该框架的api,你可以在相互间都支持wifi p2p时发现并连接其他设备,并且比蓝牙更远距离且更高速度地互相通信。这对于用户之间共享数据是非常有用的,例如多玩家游戏或者

2015-09-25 17:15:27 639

翻译 APP Resource——Handling Runtime Change

一些设备的参数会在运行时改变(如屏幕方向,键盘是可用性,语言等),当这样的变化发生Android会重新启动当前正在运行的Activity(调用onDestroy()再调用onCreate())。重启动的设计是为了帮助你的程序通过自动加载匹配新的设备参数的资源文件来适应参数的变化。要恰当的处理重启动,需要确保你的activity能够通过一般的生命周期(通过在销毁activity之前调用onSaveI

2015-09-25 13:56:17 387

转载 view的触摸事件OnTouch与监听

转自 http://www.apkbus.com/forum.php?mod=viewthread&tid=243810&extra=触摸,手势操作已经很好的融入了我们的生活。那么Android开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习。onTouch事件做什么都好先了解原理以后的工作

2015-07-25 21:09:32 3768

原创 关于使用view的getLeft(),getTop()等方法的问题

1,为什么我有时候在使用getLeft(), getRight(), getTop(), getBottom()它们得到的结果是0?答: 出现这种情况可能是在刚启动程序,程序刚开始绘制 view 的时候,你马上使用代码去捕获上面的值。这个时候,由于view 是刚开始绘制的,你得到的就会是 0 。在Activity的onCreate方法中使用这些方法的时候结果就会使0.验证我上面

2015-07-22 14:40:19 1910 1

原创 Spinner的Android:prompt无法显示文本

1、XML文件中Spinner组件的代码:2、values string中的值:3、结果显示, 只有   android:entries的值, 没有显示Android:prompt这是因为prompt属性只在dialog状态才有用,解决方法:在XML中,将style设置为Widget.Spinner  , 代码如下:    style="@android

2015-07-12 09:29:55 6030 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除