本例是一個拖動小球的游戲(坑爹,給Baby玩的吧。。),主要是用到Android2D繪圖技術、自定義組件技術。
話不多說,先上圖:
1. 窗口在拖動小球之後會變為當前的Touch坐標
2. 當手選中小球(有點難選中,球有點兒小),手機會震動(必須是真機才有震動),50ms。
3. 小球會隨著手的移動而移動。
4. 不加代碼控制的話,小球可以自Right、Bottom兩個方向移出視圖,那個時候你就看不到了。不過本例子中加入了代碼,是不能移出邊界的。
5. 例子比較簡單,功能也很單一,需要改進。歡迎安油門提出更好的實現方案。
實現思路:
1. 自定義一個BallView類,主要有一個成員變量HashSet<Ball> basket,顧名思義,用來存放Ball的Set集合。
2. BallView實現OnTouchListener,能監聽Touch事件。
3. 將實現好的BallView類加入MainActivity,運行即可見到如圖效果。
代碼:
- package ryan.entity;
- import android.util.Log;
- /**
- * @author Ryan Hoo
- * @date: 2012/3/11
- * */
- publicclass Ball {
- publicint id;// 唯一標示
- publicfloat x;// 橫坐標
- publicfloat y;// 縱坐標
- publicint drawableId;
- public Ball(float x, float y, int drawableId) {
- this.x = x;
- this.y = y;
- this.drawableId = drawableId;
- id = this.hashCode();
- Log.d("ball init", "id:" + id + " x:" + x + " y:" + y + " drawableId:"
- + drawableId);
- }
- }
- package ryan.entity;
- import android.util.Log;
- /**
- * @author Ryan Hoo
- * @date: 2012/3/11
- * */
- publicclass Ball {
- publicint id;// 唯一標示
- publicfloat x;// 橫坐標
- publicfloat y;// 縱坐標
- publicint drawableId;
- public Ball(float x, float y, int drawableId) {
- this.x = x;
- this.y = y;
- this.drawableId = drawableId;
- id = this.hashCode();
- Log.d("ball init", "id:" + id + " x:" + x + " y:" + y + " drawableId:"
- + drawableId);
- }
- }
- package ryan.activity;
- import ryan.entity.Ball;
- import ryan.view.BallView;
- import android.app.Activity;
- import android.os.Bundle;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.ViewGroup.LayoutParams;
- import android.widget.Toast;
- publicclass MainActivity extends Activity {
- /** Called when the activity is first created. */
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- /*requestWindowFeature(Window.FEATURE_NO_TITLE);
- getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
- WindowManager.LayoutParams.FLAG_FULLSCREEN);*/
- BallView view = new BallView(this);
- view.setBackgroundDrawable(getResources().getDrawable(R.drawable.back));
- view.addComponent(new Ball(0, 10, R.drawable.ball_blue));
- view.addComponent(new Ball(80, 10, R.drawable.bol_geel));
- view.addComponent(new Ball(160, 10, R.drawable.bol_groen));
- view.addComponent(new Ball(240, 10, R.drawable.bol_rood));
- super.onCreate(savedInstanceState);
- setContentView(view, new LayoutParams(LayoutParams.FILL_PARENT,
- LayoutParams.FILL_PARENT));
- int width = getWindowManager().getDefaultDisplay().getWidth();
- int height = getWindowManager().getDefaultDisplay().getHeight();
- Toast.makeText(this, "width:" + width + "\nheight:" + height,
- Toast.LENGTH_SHORT).show();
- }
- @Override
- publicboolean onCreateOptionsMenu(Menu menu) {
- getMenuInflater().inflate(R.menu.menu, menu);
- returntrue;
- }
- @Override
- publicboolean onMenuItemSelected(int featureId, MenuItem item) {
- if(item.getItemId() == R.id.exit)
- finish();
- returnsuper.onMenuItemSelected(featureId, item);
- }
- }
源碼下載地址
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.com
具體下載目錄在 /2012年資料/11月/11日/DragTheBall小游戲之Android拖拽技術