- 博客(19)
- 资源 (4)
- 收藏
- 关注
原创 cocos2d-x实现node圆弧运动
最近在用cocos2d-x做鱼在水池里游动,直线游动比较容易实现,但是要使鱼转弯,绕着圆弧游动就有点难度了,不仅鱼的位置是圆的轨迹点,它的方向也要跟着相应变化,并且要准确控制它是顺时针转还是逆时针。搞了大半天,不断试验不断修改,终于把它封装成一个CCArcBy的action, 以后可以直接拿来用了。 CCArcBy的初始化方法是bool initWithDuration(ccTime
2011-12-15 17:53:40
2579
2
原创 cocos2d-x和objective-c的内存管理
最近在公司做一个掌上青蛙的游戏项目,是采用c++写的cocos2d-x开发的,它是iPhone上cocos2d框架另一个语言版本的实现,最大的优势是能实现跨平台运行,通过简单的修改就可以在android和iPhone上跑了。 因为功能和接口和objective-c版
2011-10-16 22:00:14
3384
原创 关于Android的ClassLoader探索
最近突发奇想,想做一个插件框架,就是实现一个微内核,所有扩展功能都通过下载插件加载的方式来实现,原理跟现在用的eclipse差不多。要做到这些动态加载类少不了,就是内核上事先定义好接口,通过网络或其他方式下载的插件要实现这些接口,只要定义好规则,系统就可以使用这些插件了。
2011-08-31 18:46:23
15994
1
原创 对AttributeSet和defStyle的理解
<br /> 在通过xml文件构造view组件的时候,往往都要使用到AttributeSet和defStyle这个两个参数,例如Button组件的构造方法Button(Context ctx, AttributeSet attrs, int defStyle)中,ctx会调用obtainStyledAttributes( AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)方法获得一个TypedArray
2010-09-28 16:26:00
12700
原创 初步认识view组件焦点切换原理
<br /> 这段时间因为自己要实现一套组件焦点切换机制,今天认真研究了一下Android的view组件是如何切换焦点的。Android'view组件的切换的接口是focusSearch(View focused, int direction), 它是通过FocusFinder这个类来实现的,也就是把整个view切换逻辑都搬到了这个类里,这是个好主要,不至于让view过分臃肿(虽然已经很庞大了...)。FocusFinder会首先会通过view的getFocusables(int direction
2010-09-10 16:41:00
5297
原创 定义Window进入和退出效果
<br /> 看了android的源代码和资源文件,终于明白如何去修改设置Dialog和Activity的进入和退出效果了。设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttributes()方法获得window的WindowManager.LayoutParams lp, lp有个公共属性windowAnimations, 只要把要实现的animation的id赋值给它就可以了。问题是这个animation应该怎么写呢,研究发现,窗口进入和退出的效果分别是通过@an
2010-09-06 17:29:00
7674
6
原创 对Canvas和Matrix的理解(2)
<br /> 今天终于切切实实弄明白matrix那几个方法的使用了,比如preTranslate, setTranslate, postTranslate这些。以前对它们都是一知半解,以为这几个方法没什么区别,其实还是有很大不同的,最紧要是这几个方法的调用顺序对坐标变换的影响。抽象的说pre方法是向前"生长", post方法是向后"生长",具体拿个例子来说,比如一个matrix调用了下列一系列的方法:<br /> matrix.preScale(0.5f, 1); matrix.preTra
2010-09-04 15:57:00
8806
1
原创 对View的onMeasure方法理解
<br /> 我们知道View在屏幕上显示出来要先经过measure和layout. 在调用onMeasure(int widthSpec, int heightSpec)方法时,要涉及到MeasureSpec的使用,MeasureSpec有3种模式分别是UNSPECIFIED, EXACTLY和AT_MOST, 那么这些模式和我们平时设置的layout参数fill_parent, wrap_content有什么关系呢。经过代码测试就知道,当我们设置width或height为fill_parent时,容
2010-08-28 18:34:00
9133
3
原创 对window和view显示的理解
很多时候都搞不清window和view之间的关系,今天重新看了一下api和源代码,终于又有多点认识了。其实window没有继承其他类,它是object的直接子类,这和iPhone中window和view的关系不同。window是抽象类,由系统内部实现,我们通常实例化不了。window其实是对view的包装,提供更多的特性,比如标题、进度条等,可通过requestFeature(int id)方法进行设置。 每个activity都包含一个window, 它的内部实现是PhoneWindow, 要
2010-08-26 14:39:00
2078
原创 对View DrawingCache的理解
<br /> View组件显示的内容可以通过cache机制保存为bitmap, 使用到的api有<br /> void setDrawingCacheEnabled(boolean flag), <br /> Bitmap getDrawingCache(boolean autoScale), <br /> void buildDrawingCache(boolean autoScale), <br /> void destroyDrawingCache()<br />
2010-08-25 15:37:00
13556
1
原创 对ViewGroup touch事件响应的理解
<br /> ViewGroup在接收到touch事件时,通过dispatchTouchEvent(MotionEvent event)把事件分发到子view里. touch事件的起始动作是ACTION_DOWN, viewgroup会调用onInterceptTouchEvent(MotionEvent ev)方法,若返回false才会正式分发事件到子view中,子view也调用dispatchTouchEvent方法,若返回true证明它消费了这个事件, viewgroup会把mMotionTarg
2010-08-17 20:41:00
1735
原创 对Canvas和Matrix的理解
<br /> 我们看到的View视图其实最终都是在Canvas这个画板上画出来的,可以想象这个canvas有无限大,只是View组件在绘制时,即父组件调用dispatchDraw(Canvas c)分发给各个子组件绘制时,根据子组件的大小和位置,分别调用canvas的translate(int dx, int dy)和clipRect(int l, int t, int r, int b)方法来设置canvas的当前原点坐标和绘制的可见范围。所以当我们在view组件通过onDraw(Canvas c)
2010-08-06 00:14:00
1957
原创 对View组件touch事件响应的理解
Android响应View组件的touch事件通常是采用重写onTouch(MotionEvent event)方法,或者是setOnTouchListener()设置listener.View组件的touch事件的响应是通过调用dispatchTouchEvent(MotionEvent event)方法分发的,当touch listener为null或者它返回的结果是false时,就调用onTouch()方法,所以touch listener的优先级要比onTouch()方法的高。当onTouc
2010-08-05 13:08:00
2559
原创 对View组件布局和绘制过程, 以及Drawable绘制的理解
<br /> Android的view组件显示主要经过mesure, layout和draw这三个过程。在mesure阶段里调用mesure(int widthSpec, int heightSpec)方法,这个方法是final不能被重写,在这个过程里会调用onMesure(int widthSpec, int heightSpec)方法。当组件设置好大小后,调用final layout(int l, int t, int r, int b)方法进行布局,在这个过程里会调用onLayout(boole
2010-08-05 12:25:00
7020
1
转载 Android 任务、进程和线程
<br /><br /> 关于Android中的组件和应用,之前涉及,大都是静态的概念。而当一个应用运行起来,就难免会需要 关心进程、线程这样的概念。在Android中,组件的动态运行,有一个最与众不同的概念,就是Task,翻译成任务,应该还是比较顺理成章的。<br />Task的介入,最主要的作用,是将组件之间的连接,从进程概念的细节中剥离出来,可以以一种不同模型的东西进行配置,在很多时候,能够简化上层开发人员 的理解难度,帮助大家更好的进行开发和配置。<br /><br />任务<br />
2010-06-23 18:11:00
1206
原创 对Android进程优先级和Service的理解
<br /> 刚才又看了android的官方文档,对它的进程优先级和service理解得更多了。android为了管理内存释放有限的空间,会根据优先级杀掉一些进程,进程优先级越低的优先被清除。从高到低依次为:<br /> 1. foreground process<br /> 2. visible process<br /> 3. service process<br /> 4. background process<br /> 5. empty proce
2010-06-23 17:53:00
4237
原创 ui组件的接口回调
最近在做android平台的购彩软件,今天对ui事件实现有点体会,就是应该尽量使用接口监听回调机制,其实android上许多组件都有这方面的接口,当自己定制组件的时候也可以参照这种模式,至于接口的注册可以在XML上声明实现,这样可以有效减少代码量。还有要善于利用XML布局和自定义属性,组件的生成尽可能用XML方式声明,特别是对于那些要设置复杂属性的组件。
2010-04-28 18:13:00
550
原创 Hashtable,HashMap实现原理
昨天看了算法导论对散列表的介绍,今天看了一下Hashtable, HashMap这两个类的源代码,并参考了网上的一些观点,对它们的实现有了大概的理解。原来hashtable里的key-value还是用数组存储的,数组元素是Entry类型,同一数组索引下储存的实质是一个Entry链表,Entry中的next值指向下一个Entry.当把key-value放进hashtable时,会根据key的
2010-01-27 09:50:00
2152
原创 对Java Enum的理解
1.用enum定义的类型是Enum类的子类,默认为final,可以有属性和方法,但要首先指明它可以表示的一系列的枚举值实例,默认为public static final;2.用enum定义的类型可以独立为一个文件进行编译运行,可以拥有main方法,是一个特殊的类;3.当创建枚举类型实例时,会依次调用定义的各个枚举值构造方法,构造方法不能声明为public或protected;4.可以为每个枚举值的
2008-12-09 12:32:00
469
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人