开源项目之AndroidGlobalTime(全球各地时间)

AndroidGlobalTime 是一个用来查看全球各地时间的运行在 Android 手机平台上的小软件,通过旋转地球来查看对应的地区时间。
效果如图:




该项目共10个目标文件!~

Shape抽象类:使用OpenGL ES绘制各种三维对象的抽象父类,每个子类是负责建立NIO缓冲区的顶点,纹理坐标,颜色,法线和指数。

Annulus类继承Shape抽象类:实现绘制一个环与一个指定的中心、以及内外半径。每一个彩色和其它像素的内圈和外圈的颜色都由内插法。

City类:代表一个城市、一个相关​​的位置、时区名称。

Clock类:实现绘制一个模拟时钟面的类与一个城市的当前时间信息。

GlobalTime类:显示主界面。

GTView类:主界面视图。

Message类:自定义消息体,一个文本和一个有效值。

GLView类:

Texture类:文本

Sphere类继承Shape抽象类:实现球。

PointCloud类继承Shape抽象类:绘制在夜侧的城市的灯光。

LatLongSphere类:纬度经度圈。


绘画实现:

   /**
     * 绘制给定的形状,发出这种形状的偏好设定纹理坐标,法线和颜色。
     */
    public void draw(GL10 gl) {
        gl.glVertexPointer(3, GL10.GL_FIXED, 0, mVertexBuffer);
        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

        if (mEmitTextureCoordinates) {
            gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
            gl.glTexCoordPointer(2, GL10.GL_FIXED, 0, mTexcoordBuffer);
            gl.glEnable(GL10.GL_TEXTURE_2D);
        } else {
            gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
            gl.glDisable(GL10.GL_TEXTURE_2D);
        }

        if (mEmitNormals) {
            gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
            gl.glNormalPointer(GL10.GL_FIXED, 0, mNormalBuffer);
        } else {
            gl.glDisableClientState(GL10.GL_NORMAL_ARRAY);
        }

        if (mEmitColors) {
            gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
            gl.glColorPointer(4, GL10.GL_FIXED, 0, mColorBuffer);
        } else {
            gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
        }

        gl.glDrawElements(mPrimitive,
                          mNumIndices > 0 ? mNumIndices : mIndexBuffer.capacity(),
                          mIndexDatatype,
                          mIndexBuffer);
    }

关键视图有GLView和GTView!实现了3D绘画以及时间显示~


现在看下项目附带的测试手势的实例,效果如图:



它们分别是两个不同的类,如下:

//实现手势手别监听
public class GesturesActivity extends Activity implements OnGesturePerformedListener
{
	private GestureLibrary mLibrary;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		//加载资源
		mLibrary = GestureLibraries.fromRawResource(this, R.raw.spells);
		if (!mLibrary.load())
		{
			finish();
		}

		GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures);
		gestures.addOnGesturePerformedListener(this);
	}

	public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture)
	{
		ArrayList<Prediction> predictions = mLibrary.recognize(gesture);

		// 我们希望至少有一个预测
		if (predictions.size() > 0)
		{
			Prediction prediction = predictions.get(0);
			// 我们希望至少有一些信心的结果
			if (prediction.score > 1.0)
			{
				//显示语法
				Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show();
			}
		}
	}
}

public class GesturesListActivity extends ListActivity implements OnGesturePerformedListener
{
	private GestureLibrary mLibrary;

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		// Populate the activity with the names of our contacts
		Cursor query = managedQuery(Contacts.People.CONTENT_URI, new String[]
		{ Contacts.People._ID, Contacts.People.DISPLAY_NAME }, null, null, Contacts.People.DEFAULT_SORT_ORDER);

		ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, query, new String[]
		{ Contacts.People.DISPLAY_NAME }, new int[]
		{ android.R.id.text1 });

		setListAdapter(adapter);

		mLibrary = GestureLibraries.fromRawResource(this, R.raw.actions);
		if (!mLibrary.load())
		{
			finish();
		}

		GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures);
		gestures.addOnGesturePerformedListener(this);
	}

	public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture)
	{
		ArrayList<Prediction> predictions = mLibrary.recognize(gesture);
		if (predictions.size() > 0)
		{
			if (predictions.get(0).score > 1.0)
			{
				String action = predictions.get(0).name;
				if ("action_add".equals(action))
				{
					Toast.makeText(this, "Adding a contact", Toast.LENGTH_SHORT).show();
				} else if ("action_delete".equals(action))
				{
					Toast.makeText(this, "Removing a contact", Toast.LENGTH_SHORT).show();
				} else if ("action_refresh".equals(action))
				{
					Toast.makeText(this, "Reloading contacts", Toast.LENGTH_SHORT).show();
				}
			}
		}
	}
}
源码简单易懂!~
学习的目标是成熟!~~~







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值