注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

木子三石的博客

计算机技术和现代诗艺术!

 
 
 

日志

 
 

《安卓开发笔记1》  

2014-08-22 13:04:23|  分类: android应用开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
2013年8月6日

1、在使用布局中的layout_gravity属性时注意,它只能用于线性布局,而不能用于相对布局,它的意思是竖直方向上布局,跟重力是一条线上意思。

2、相对布局里面不能用layout_gravity属性。

3、线性布局默认是用水平布局。

4、Activity的属性中android:noHistory可以决定是否删除当前活动,当要切换到其他活动时。

5、SimpleAdapter可以存一些ImageView等组件。

6、网格布局和表格布局的区别是,网格布局是可滚动的。

7、Menu类中的add(int,int,int,String)函数中的参数依次表示菜单项所属组ID,菜单项ID,菜单项顺序ID,菜单要显示的文字。

8、所谓动态菜单,并不是弹出窗口,而是根据条件是否显示出来的菜单。

9、IBinder是一个接口,直接子类是Binder。

***********************************************************************
1、TabHost是用于确定TabWidget的使用方式的,TabHost标记中必须要有TabWidget标记,这个标记其实就是代表了一个选项标签,跟在后面的选项内容,可以采用FrameLayout,LinearLayout布局等。

2、TabHost其实就是指的 选项卡。

3、GridView的StretchMode属性用于设置视图的可伸缩性。

3、((BindMusicService.MyBinder)(service)).getService();
***********************************************************************

***********************************************************************
1、JNI中获取JAVA类中的数据和方法的  函数有:
GetFieldID   GetStaticFieldID(获取静态数据)  GetMethodID  GetStaticMethodID(获取静态方法)
 
      调用方法和数据的方式是:
       Call(类型)Method()  Get(类型)Field()
 
2、数据类型的签名:
boolean    Z
byte       B
char       C
short      S
int        I
long       L
float      F
double     D
void       V
各种类     L包名+类名
3、通过jobject类型的类型信息可以获取 函数所在类的类型信息。

4、函数的签名中,返回值类型写在最后。例如:(ILjava/util/Date;[I)I

5、获取数据ID的函数格式:jfieldID fID=(*env)->GetFieldID(env,class,"name","I");
 
获取方法ID的函数格式:jmethodID m=(*env)->GetMethodID(env,class,"fun","(I)I");
 
使用数据的函数的格式:jint i=(*env)->GetIntField(env,object,fID);
 
使用方法的函数的格式:(*env)->CallIntMethod(env,object,"fun",20);
 
6、可以使用Handler实现线程之间的通信,可以用循环了。

7、游戏中用的视图 一般是SurfaceView类。
***********************************************************************

***********************************************************************
OpenGL ES GL10 类的使用
1、Renderer里的onSurfaceCreated()函数是在当创建了GLSurfaceView对象的时候调用;onSurfaceChanged()函数实在当GLSurfaceView出现

横屏和竖屏切换时调用;onDrawFrame()函数是在绘制GLSurfaceView的时候调用的。(setContentView());另外onDrawFrame()函数是被循环调用的以便能随时刷新要绘制的图形。

补充:onDrawFrame()方法会在每帧中被调用,用于描述一个实时绘制的场景,你还可以通过调用 glclear 方法去清空帧缓冲,接着通过其他OpenGl ES 调用去绘制目前的场景。

三个函数的调用顺序如下
onSurfaceCreated  -->  onSurfaceChanged  --> onDrawFrame  --> onDrawFrame  --> onDrawFrame  -->...    (很重要!!!)

2、GL10里的  glClearColor()用于设置绘图的背景颜色。

     glClear()可用于清除预定义的背景颜色和背景深度值,要想重新设置背景颜色,必须先调用这个函数,然后用上个函数设置。
             
             glEnableClientState()函数用于确定要处理的是什么样的数据。(有Vertex顶点类型,什么数据组成图形的主体)
             
             glEnable()可以使能是否去除图形背面或正面。
             
             glColor4f()用于设置绘图所用的颜色值和透明度。
             
             glVertexPointer()用于设置顶点的维数,顶点坐标数据类型(比如GL10.GL_FLOAT,浮点型;GL10.GL_FIXED,整型),顶点缓冲。 总的来说就是设置顶点的属性。
             
             glColorPointer()用于设置顶点的颜色属性。
             
             glDrawElements()用于最终绘制图形。
             
             glFrontFace()可以用于设置顶点以 逆时针 或 顺时针 绘制出的图形是正面。(默认逆时针为正面)
             
             glCullFace()选择去除背面还是正面,还是两者一起。
             
             glLoadIdentity()该命令是一个无参的无值函数,其功能是用一个4×4的单位矩阵来替换当前矩阵,
             实际上就是对当前矩阵进行初始化。也就是说,无论以前进行了多少次矩阵变换,在该命令执行后,
             当前矩阵均恢复成一个单位矩阵,即相当于没有进行任何矩阵变换状态。
             
             补充:说白了就是让变化后的坐标回到变化前。
            
             glViewPort()确定可看到区域即(视窗)的大小。(viewport是视窗的意思)
             
             glMatrixMode()设置当前矩阵,有模型矩阵,投影(正交 和 透视)矩阵。(设置模型坐标后,图形可以平移、旋转、缩放)
             projection有投影的意思。
             
             glOrthof()可以将当前的可视空间设置为正交投影空间。(ortho的意思就是正交)
             
             glShadeModel()用于设置着色模型,平滑或不平滑。
             
             glHint()给一些提示操作,和图像质量有关。
             
             glFrustumf()设置绘图区域的大小,不设置默认为零。
             
             glTranslatef()用于图形的平移。
             
             glRotatef()图形旋转。
             
             glDrawArrays()也是用于绘制图形。
             
             glTexCoordPointer()用于指定纹理映射的坐标的属性。
             
             glGenTextures()用于产生纹理的,让OpenGL知道有哪些名字的纹理       
             
3、创建整形缓冲IntBuffer的五个步骤

1)ByteBuffer bb=ByteBuffer.allocateDirect(vertices.length*4);这里为顶点坐标分配字节的内存空间,定义了一个ByteBuffer对象来表示。

2)bb.order(ByteOrder.nativeOrder());这里设置本地平台的字节顺序。
3)vertexbuffer=bb.asIntBuffer();这里把字节缓冲转换为整型缓冲。
4)vertexbuffer.put(vertices);这里向整型缓冲中装入顶点坐标数据。
5)vertexbuffer.position(0);这里设置整型缓冲的起始位置。       
4、遗留问题:
1)颜色缓冲,深度缓冲,模型缓冲?
2)glMatrixMode(GL10.GL_MODELVIEW)指定绘制的3D图形必须要有 平移,旋转,缩放 的特性,必须调用,3D图形还必须要有透视的特性,所以 glMatrixMode(GL10.GL_PROJECTION)必须调用。 纹理特性不是3D图形必须的,所以不一定非要调用glMatrixMode(GL10.GL_TEXTURE)。
5、OpenGL 3D绘图编程思路

第一步:准备好要绘制的图形的参数和数据,比如顶点坐标值,颜色值,定点顺序值。
第二步:明确基本坐标系不会改变,接下来确定绘图区域大小,再接下来明确将要绘制的3D图形的坐标的特性,是否可以平移,旋转,缩放,透视和纹理,其中平移,旋转,缩放和透视是3D图形的基本和本质特点,但是OpenGL ES又不默认,必须要预先申明我们绘制的图形的坐标有有这些特性,所以不得不调用glMatrixMode()函数。
第三步:这一步可以确定窗口大小设置,不设置的话就使用默认的。还有设置绘图背景颜色,设置绘图的坐标值得来源,颜色值来源,绘图的正背面,或选择显示哪些面, 设置图形是否有旋转,平移,缩放的效果,是否恢复到坐标变换前。  
6、关于纹理贴图的总结:

1、一次只能让一个纹理处于激活状态。
2、纹理坐标是用s、t坐标系来确定的,相当于x、y坐标系,坐标起点必须从左下角的(0,0)开始。
3、贴图流程:
arg0.glEnable(GL10.GL_TEXTURE_2D);//使能纹理贴图
arg0.glGenTextures(1,textureID,0);//给需要的纹理取编号,产生纹理
arg0.glBindTexture(GL10.GL_TEXTURE_2D, textureID[0]);//确定激活哪个编号的纹理
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0,InitBitmap.bitmap,0);//给当前激活的纹理装载图片位图数据 
arg0.glTexParameterx(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_LINEAR);//图象从纹理图象空间映射到帧缓冲图象空间(映射需要重新构造纹理图像,这样就会造成应用到多边形上的图像失真),这时就可用glTexParmeteri()函数来确定如何把纹理象素映射成像素。

arg0.glTexParameterx(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_LINEAR);
arg0.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);//使能纹理坐标
arg0.glTexCoordPointer(2, GL10.GL_FLOAT,0,retT());//确定纹理坐标属性
**注**:期间需要准备位图bitmap,定义纹理坐标数组texture[],纹理编号数组textureID[]。
             
***************************************************************************          
             
***************************************************************************
Android  的WIFI编程
1、要使用Android的WIFI,就需要WIFIManager类来操作。
WifiManager wifiManager=(WifiManager)Content.getSystemService(Service.WIFI_SERVICE);
2、打开WIFI。
wifiManager.setWifiEnabled(true);
3、关闭WIFI。
wifiManager.setWifiEnabled(false);
4、获取WIFI状态。
wifiManager.getWifiState();

5、WIFI的状态有:
WIFI_STATE_DISABLED(网卡不可用)
WIFI_STATE_DISABLING(网卡正在关闭)
WIFI_STATE_ENABLED(网卡可用)
WIFI_STATE_ENABLING(网卡正在打开)
WIFI_STATE_UNIKNOWN(未知状态)
6、操作网卡所需要的权限:
CHANG.NETWORK.STATE
CHANG.NETWORK.WIFISTATE
ACCESS.NETWORK.STATE
ACCESS.NETWORK.WIFISTATE
***************************************************************************   
             
             
             
             
             
             
             
             
             
             
               
 

  评论这张
 
阅读(4)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017