![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
czh0766
QQ: 452527750
展开
-
对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 · 6954 阅读 · 3 评论 -
cocos2d-x和objective-c的内存管理
最近在公司做一个掌上青蛙的游戏项目,是采用c++写的cocos2d-x开发的,它是iPhone上cocos2d框架另一个语言版本的实现,最大的优势是能实现跨平台运行,通过简单的修改就可以在android和iPhone上跑了。 因为功能和接口和objective-c版原创 2011-10-16 22:00:14 · 3350 阅读 · 1 评论 -
关于Android的ClassLoader探索
最近突发奇想,想做一个插件框架,就是实现一个微内核,所有扩展功能都通过下载插件加载的方式来实现,原理跟现在用的eclipse差不多。要做到这些动态加载类少不了,就是内核上事先定义好接口,通过网络或其他方式下载的插件要实现这些接口,只要定义好规则,系统就可以使用这些插件了。原创 2011-08-31 18:46:23 · 15920 阅读 · 13 评论 -
对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 · 12617 阅读 · 0 评论 -
定义Window进入和退出效果
<br /> 看了android的源代码和资源文件,终于明白如何去修改设置Dialog和Activity的进入和退出效果了。设置Dialog首先通过getWindow()方法获取它的窗口,然后通过getAttributes()方法获得window的WindowManager.LayoutParams lp, lp有个公共属性windowAnimations, 只要把要实现的animation的id赋值给它就可以了。问题是这个animation应该怎么写呢,研究发现,窗口进入和退出的效果分别是通过@an原创 2010-09-06 17:29:00 · 7609 阅读 · 9 评论 -
对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 · 8737 阅读 · 4 评论 -
初步认识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 · 5217 阅读 · 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 · 9058 阅读 · 5 评论 -
对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 · 2024 阅读 · 0 评论 -
对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 · 13454 阅读 · 2 评论 -
对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 · 1689 阅读 · 0 评论 -
对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 · 1902 阅读 · 0 评论 -
对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 · 2534 阅读 · 0 评论