Android一个小球弹跳的例子,希望对大家有用

转自http://blog.csdn.net/lovexjyong/article/details/6892723

1.小球类

 

package com.android.ballmove;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;

public class Ball {
 /**  
 18.          * 球的高  
 19.          */  
          public static final int HEIGHT = 93;   
          /**  
 22.          * 球的宽  
 23.          */  
          public static final int WIDTH = 93;   
          private static final int STEPLENGTH = 10;//每次运动的间距   
          private static final float REDUCEPERCENTAGE =  0.35F;//递减系数   
          private int stepReduce ;//每次反向运动的缩短的距离   
            
          private float runX ;//球的位置   
          private float runY ;//球的位置   
         private BallSurfaceView bsv ;   
          private boolean upDirection = false;//if true,up direction,or is down direction   
          private float maxHeight ;//当前运动最高的高度   
          private Paint paint ;   
            
          Bitmap ballBitmap ;//球的图片   
          SportActivity sa ;   
          public Ball(float initX , float initY , BallSurfaceView bsv){   
                    this.runX  = initX;   
                    this.runY = initY ;   
                    maxHeight = initY;   
                    this.bsv = bsv;   
                    ballBitmap = BitmapFactory.decodeResource(bsv.getResources(), R.drawable.ball);//加载图片   
                    paint = new Paint();   
                    sa = bsv.sportActivity;   
          }   
            
          public void onDraw(Canvas canvas) {   
                    int c = paint.getColor();//保存颜色,之后还原为之前颜色   
                    boundaryTest();   
                    if(canvas != null) canvas.drawBitmap(ballBitmap,runX,runY,paint);   
                    paint.setColor(c);   
                    move();   
         }   
         /**  
 56.          * 运动  
 57.          */  
          private void move() {   
                    if(maxHeight >= (sa.screenHeight - HEIGHT)) {   
                             return;   
                   }   
                   if(upDirection){//向上   
                             runY = runY + STEPLENGTH ;   
                    }else{   
                             runY = runY - STEPLENGTH ;   
                    }   
          }   
     
          /**  
 70.          * 边界检测,使球不会飞出边界  
 71.          */  
          private void boundaryTest(){   
     
                    if(runY > sa.screenHeight - HEIGHT){//向下运动到头   
                           upDirection = !upDirection;//方向置反   
                             runY = sa.screenHeight - HEIGHT;   
                             stepReduce = (int) (maxHeight * REDUCEPERCENTAGE);   
                             maxHeight = maxHeight + stepReduce ;//最大高度递减   
                               
                   }   
                    if(runY < maxHeight ){//向上运动到头   
                            upDirection = !upDirection;//方向置反   
                            if(maxHeight >= (sa.screenHeight - HEIGHT)) return;   
                             runY = maxHeight ;   
                               
                   }   
         }   
 }  

 

2.小球弹跳的过程

 

package com.android.ballmove;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class BallSurfaceView extends SurfaceView implements SurfaceHolder.Callback{   
         SportActivity sportActivity ;//调用该SurfaceView的上下文引用   
         private Ball ball ;//小球   
         SurfaceHolder holder ;   
           
        public BallSurfaceView(Context context) {   
                   super(context);   
                   this.sportActivity = (SportActivity)context ;   
                   ball = new Ball(100, 100, this);   
                   holder = this.getHolder();   
                   holder.addCallback(this);   
         }   
    
         @Override  
         protected void onDraw(Canvas canvas) {   
                   super.onDraw(canvas);   
                     
                   if(canvas == null) canvas = holder.lockCanvas();//锁定画布   
                   Paint p = new Paint();   
                   int c = p.getColor();   
                   p.setColor(Color.GRAY);//设置背景白色   
                   if(canvas != null)   
                   canvas.drawRect(0, 0, sportActivity.screenWidth, sportActivity.screenHeight, p);   
                   p.setColor(c);   
                   ball.onDraw(canvas);   
                   holder.unlockCanvasAndPost(canvas);//释放锁   
         }   
    
         @Override  
         public void surfaceChanged(SurfaceHolder holder, int format, int width,                               int height) {   
                     
         }       
         @Override  
         public void surfaceCreated(SurfaceHolder holder) {   
                   new RefreshThread().start();   
         }   
    
         @Override  
         public void surfaceDestroyed(SurfaceHolder holder) {   
                     
        }   
           
         private class RefreshThread extends Thread{   
    
                   @Override  
                   public void run() {   
    
                           while(true){   
                                     Canvas canvas = null;   
                                     try{   
                                              onDraw(canvas);   
                                     }catch(Exception e){   
                                               e.printStackTrace();   
                                     }                                         
                                    try {   
                                              Thread.sleep(40);   
                                     } catch (InterruptedException e) {   
                                               e.printStackTrace();   
                                     }   
                            }   
                   }   
                     
        }   
    


 

3.Activity

 

package com.android.ballmove;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Window;
import android.view.WindowManager;

public class SportActivity extends Activity {
  public int screenWidth ;   
           public int screenHeight ;   
           BallSurfaceView bsv ;   
      /** Called when the activity is first created. */  
      @Override  
      public void onCreate(Bundle savedInstanceState) {   
          super.onCreate(savedInstanceState);   
          bsv = new BallSurfaceView(this);   
         //获得屏幕尺寸   
         DisplayMetrics dm = new DisplayMetrics();   
      dm = this.getApplicationContext().getResources().getDisplayMetrics();   
               screenWidth = dm.widthPixels;   
                screenHeight = dm.heightPixels;   
             //下两句为设置全屏   
          requestWindowFeature(Window.FEATURE_NO_TITLE);   
                     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN ,    
                                  WindowManager.LayoutParams.FLAG_FULLSCREEN);   
           
        setContentView(bsv);   
      }  

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值