在Android中要让一个程序的界面始终保持一个方向,不随手机方向转动而变化的办法: 只要在AndroidManifest.xml里面配置一下就可以了。
在AndroidManifest.xml的activity(需要禁止转向的activity)配置中加入android:screenOrientation=”landscape”属性即可(landscape是横向,portrait是纵向)。例如:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.boyaa.texas.app.activity" android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name"
android:debuggable="true">
<activity android:name=".GameActivity" android:label="@string/app_name"
android:screenOrientation="landscape" android:windowSoftInputMode="stateVisible|adjustPan"
android:configChanges="orientation|keyboardHidden">
<!--
android:windowSoftInputMode就是用来避免输入法面板遮挡问题的;android:configChanges:当横竖屏切换时不会重新加载界面
-->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.boyaa.texas.app.activity.GameRoomActivity" android:screenOrientation="landscape" android:windowSoftInputMode="stateVisible|adjustPan"
android:configChanges="orientation|keyboardHidden"/>
</application>
<uses-sdk android:minSdkVersion="4" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
</manifest>
另外,android中每次屏幕方向切换时都会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!
要避免在转屏时重启activity,可以通过在androidmanifest.xml文件中重新定义方向(给每个activity加上android:configChanges=”keyboardHidden|orientation”属性),并根据Activity的重写onConfigurationChanged(Configuration newConfig)方法来控制,这样在转屏时就不会重启activity了,而是会去调用onConfigurationChanged(Configuration newConfig)这个钩子方法。例如:
texture 纹理
vertex 顶点
rect 块
angle 角度
altitude 高度
triangle 三角
scale 缩放
hardness 硬度
turbulence 动荡,偏移
hsb 色相/饱和度/亮度
tessellation 镶嵌
raster 光栅
ortho 正交,即坐标原点
blend 混色
mask 蒙板
depth 深度(一般用于颜色深度,色深的位数越高,屏幕上所能显示的颜色数就越多,显示的图像质量就越好)
viewport 视口
glFrustum 视口 规定视图的大小和深度的起点重点
glLoadIdentity场景透视图
dither 一般是滤色
mono单一的
smooth-shading 平滑着色
xxxFunc() //表示xxx的毁掉函数
GL_COLOR_BUFFER_BIT //颜色缓冲区
GL_DEPTH_BUFFER_BIT //深度缓冲区
GL_ACCUM_BUFFER_BIT //累计缓冲区
GL_STENCIL_BUFFER_BIT //模版缓冲区
glClearColor(0,0,0,0); rgba //设置清空颜色为黑色
glClearDepth(1.0); //指定深度缓冲区每个像素的值为1.0
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT) //以黑色清空颜色缓存区,并且清空深度缓存区所有像素为1.0;
glOrtho(0,0,0,0,0,0) //设定坐标原点
glVertex(0,0,0) //顶点坐标xyz
glColor4f(r,g,b,a) //设定颜色为rgba
//这里以六点为例 abcdef ,并且均以逆时针方式画出来的,而非乱序
glBegin(GL_POLYGON)
GL_POINTS //表示要画的点是纯点坐标
GL_LINES // 表示要画的点是线,两个顶点确定一条线 a-b c-d e-f
GL_LINE_STRIP // 表示画的点是线,并且从头连到尾 a-b-c-d-e-f
GL_LINE_LOOP // 表示画的点是线, 回环 a-b-c-d-e-f-a
GL_TRIANGLES // 画的点是在画三角 三个点确定一个三角
GL_TRIANGLE_STRIP // 画的点是在画三角 是一个连接串 abc bcd cde def
GL_TRIANGLE_FAN //画的点是在画三角 只是以第一个为核心点画, abc acd ade aef
GL_QUADS // 画的点是在画四边形 4个顶点确定一个四边形
GL_QUAD_STRIP // 画的点是在画四边形 是一个连接串 abcd cefd
GL_POLYGON // 画凸多边形
按照规定,按照逆时针画出来的多边形称为‘正面’ ,顺时针为‘反面’
glEnd();
glNormal() 设置法线向量 法线长度 等于 x^2+y^2+z^2 之和开方
projection matrix(投影矩阵)
glLoadIdentity()近似于重置。它将所选的矩阵状态恢复成其原始状态。调用 glLoadIdentity()之后我们为场景设置透视图。
glMatrixMode(GL_MODELVIEW)指明任何新的变换将会影响 modelview matrix(模型观察矩阵)。模型观察矩阵中存放了我们的物体讯息。最后我们重置模型观察矩阵。
glViewport(0, 0, width, height); // 重置当前的视口
ListView中最主要的是adapter的设置问题,这里简单写了两个Adapter。
第一种ArrayAdapter:
private static String[] data1={"a","b","c","d"}; private List data2=null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ListView listview=new ListView(this); ArrayAdapter adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,data); setContentView(listview);
其中样式 每条数据样式可自己定义,或使用系统自带的样式,如android.R.layout.simple_list_item_1。
如一行有多条数据,采用第二种SimpleAdapter:
先将数据放到 ArrayList<Map<String,Object>>中去,每条记录都是一个Map映射列表。
data2=new ArrayList<Map<String,Object>>(); Map<String, Object> item; item=new HashMap<String,Object>(); item.put("姓名","张三"); item.put("性别","男"); data2.add(item); item=new HashMap<String,Object>(); item.put("姓名","李四"); item.put("性别","男"); data2.add(item); item=new HashMap<String,Object>(); item.put("姓名","小王"); item.put("性别","女"); data2.add(item); SimpleAdapter adapter=new SimpleAdapter(this, data2, R.layout.listitem, new String[]{"姓名", "性别"},new int[]{R.id.mview1,R.id.mview2}); listview.setAdapter(adapter); setContentView(listview);
SimpleAdapter的构造函数最后两个参数,一个是String数组,里面每个字符串用于访问得到Map对象中的值。item.get("姓名");最后一个参数数组里的值为xml中两个TextView的ID。
其中list选项的样式可自己定义
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:id="@+id/mview1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="300dp"> </TextView> <TextView android:id="@+id/mview2" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </LinearLayout>