当前位置:编程学习 > wap >>

我已经实现图像按照一定路线移动怎么在原着手指的移动而移动来的基础上实现图像随

大家帮忙看一下这个程序,我已经实现了图像能够按照一定的路径移动,但是我单机屏幕时图像为什么不停止运动呢,怎么实现当我触屏时图像能随着我的手指的移动而改变方向,而不是按照原来的方向啊,谢谢大家啊,请求高手指点,最好有代码,,谢啦!


package been.myplace;

 
import java.io.InputStream;

import java.util.ArrayList;
import java.util.Random;

 

import android.app.*;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.graphics.*;
import android.os.*;
import android.util.*;
import android.view.*;
import android.view.SurfaceHolder.Callback;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
public class been extends Activity { 
 
   static Bitmap bitmap1;
    protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new been1(this));
 this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);     //强制横屏。
 
  
         
  
 
}
       
    static public class been1 extends SurfaceView implements Runnable,Callback
    {
       boolean isRunning=true;
     private SurfaceHolder sfh=null;    
     private static Canvas canvas=new Canvas();
//     private Thread th=new Thread();
     private Paint p=new Paint();
     private Bitmap bitmap;
     private float screenW,screenH;
 
     Handler handler;
        static int dx;
        
     static int left=0;
    
    
    Thread th=new Thread(this);
    
public been1(Context context) {
super(context);
sfh=getHolder();
sfh.addCallback(this);
p.setAntiAlias(true);
this.setKeepScreenOn(true);// 保持屏幕常亮   
}
  public void onDraw()
    {
       super.onDraw(canvas);
      // initmap();
       bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.garden);
       canvas.drawBitmap(bitmap,0,0,null);
//        Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.been);
//        canvas.drawBitmap(bitmap1, 0, 0, p);
       
       Resources rec = getResources();
       InputStream in = rec.openRawResource(R.drawable.been);
    // 设置图片
 
       Bitmap bitmap1 =BitmapFactory.decodeStream(in);
           
       // 绘制图片
 
       canvas.drawBitmap(bitmap1, left,getTop(), p);   
        }
  
  public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
isRunning=false;
 
}

public void run() {
// TODO Auto-generated method stub
  bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.been);
       canvas.drawBitmap(bitmap1, left, getTop(), p);
while(isRunning){



synchronized (sfh) {
for( dx=0;dx<=getWidth();dx++){

dx = left < 0 || left > (getWidth() - bitmap1.getWidth()) ? -dx : dx;
left = left+dx;
// handler.post(new Runnable() {
// public void run() {
//  invalidate();}
//
// });


canvas=sfh.lockCanvas();//取得并锁住当前画布对象(全范围)。
onDraw();
    sfh.unlockCanvasAndPost(canvas);//结束锁定画图,并提交改变。
    }
// if(left==getWidth()){dx=0;}
try
{
Thread.sleep(1000);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
  
  public boolean onTouchEvent(MotionEvent event) {
  isRunning = false;
  th.stop();
  //当点击屏幕,则将图片浮动停止  
  return true;
  
  
  }
  
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
// TODO Auto-generated method stub

}

public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
//System.out.println(screenW+" "+screenH);
isRunning=true;
// th=new Thread(this);
th.start();
}


    }
    
--------------------编程问答-------------------- 我已经解决了上面的问题,但是不知道怎么进行图片的切换,即当图片运动到屏幕的端点怎么将其自动切换到另一张图片啊 请各位高手指点啊 代码如下:

 package been.myplace;

 
import java.io.InputStream;

import java.util.ArrayList;
import java.util.Random;

 

import android.app.*;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.graphics.*;
import android.os.*;
import android.util.*;
import android.view.*;
import android.view.SurfaceHolder.Callback;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
public class been extends Activity { 
 
   static Bitmap bitmap1,bitmap2;
   static boolean mf=true;
    protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(new been1(this));
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);     //强制横屏。
 
 
}
       
     static public class been1  extends SurfaceView implements Runnable,Callback
    {
    
    
      boolean flag; //线程标示位 当为false时停止刷新界面

     SurfaceHolder surfaceHolder;

     GameViewThread gameViewThread;

     float x=0,y=0;

     int direction=0;  //图片运行方向 控制图片向上 或向下运动

     int width,height;


      static  boolean isRunning=true;
//     private SurfaceHolder sfh=null;    
     private static Canvas canvas=new Canvas();
//     private Thread th=new Thread();
     private Paint p=new Paint();
     private Bitmap bitmap;
     private float screenW,screenH;
 
     Handler handler;
        static int dx;
        
     static int left=0;
    
    
     Thread th=new Thread(this);
    
public been1(Context context) {
super(context);
surfaceHolder=this.getHolder();
//            sfh=getHolder();
surfaceHolder.addCallback(this);
p.setAntiAlias(true);
this.setKeepScreenOn(true);// 保持屏幕常亮   
bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.been);
//设置焦点 如果不设置焦点的话 在该界面下 点击触摸屏是无效的 默认为false

setFocusable(true);
setFocusableInTouchMode(flag);


}
  public void onDraw()
    {
       super.onDraw(canvas);
      // initmap();
       bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.garden);
       bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.been);
       bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.leftbeen);
       canvas.drawBitmap(bitmap,0,0,null);
//        canvas.drawBitmap(bitmap1, x, y, p);
//        canvas.drawBitmap(bitmap2, x, y, p); 
       
        
     
        
    }
  
 

public void run() {
// TODO Auto-generated method stub
   
       
while(isRunning){
synchronized (surfaceHolder) {
for( dx=0;dx<=getWidth();dx++){

dx = x < 0 || x > (getWidth() - bitmap1.getWidth()) ? -dx : dx;
x = x+dx;

  canvas=surfaceHolder.lockCanvas();//取得并锁住当前画布对象(全范围)。
onDraw();
surfaceHolder.unlockCanvasAndPost(canvas);//结束锁定画图,并提交改变。
    }
   
try
{
Thread.sleep(1000);
}catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
}
  
 
public boolean onTouchEvent(MotionEvent event) {
//  float x = event.getX(); 
//  float y = event.getY(); 
 
if(event.getAction()==MotionEvent.ACTION_DOWN){ //处理屏幕屏点下事件 手指点击屏幕时触发

x=event.getX();

y=event.getY();

}else if(event.getAction()==MotionEvent.ACTION_UP){//处理屏幕屏抬起事件  手指离开屏幕时触发



}else if(event.getAction()==MotionEvent.ACTION_MOVE){//处理移动事件 手指在屏幕上移动时触发

x=event.getX();

y=event.getY();

}

// synchronized(this){
//
//            try{
//
//                this.wait(8000);     //让事件线程休眠 减少触发次数
//
//             }catch(InterruptedException e){
//
//              e.printStackTrace();
//
//            }         
//
//           }



return true;  //此处需要返回true 才可以正常处理move事件 详情见后面的  说明

 

}

public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {
// TODO Auto-generated method stub

}

public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
width=this.getWidth();

height=this.getHeight();

isRunning=true;
// th=new Thread(this);
th.start();
// boolean a=flag;
// while(a==true){
// try {
// th.sleep(1000);
// } catch (InterruptedException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// gameViewThread=new GameViewThread();
//                flag=true;
//                gameViewThread.start();

// a=false;
// }

    if(flag){
     gameViewThread=new GameViewThread();
//        flag=true;
        gameViewThread.start();
     try {
th.sleep(1000);
} catch (Exception e) {
// TODO: handle exception
}
      flag=false;
      isRunning=true;
    }


}
 public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
isRunning=false;
 flag=false;
 
}


class GameViewThread extends Thread{

// public boolean flag;

public void run(){

while(flag){

Canvas canvas=null;

try{

canvas=surfaceHolder.lockCanvas(); //锁定画布 并获取canvas

onDraw(canvas);//调用onDraw 渲染到屏幕

surfaceHolder.unlockCanvasAndPost(canvas); //此步不要忘记了喔 否则界面上显示不出来的

}catch(Exception e){

e.printStackTrace();

}


try {

Thread.sleep(10);//线程休眠时间  控制帧数

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}  //每10毫秒刷新一次


}

}

}

 

    }
    
} --------------------编程问答-------------------- 自动换图片我已经实现了 可是怎么实现当我点击屏幕时,如果触点在图片左边,当图片移动到此地方并再次运动而此次运动图片向左运动(未触屏前图片向右运动) 谢谢大家了,代码如下:
 package been.myplace;

 
import java.io.InputStream;

import java.util.ArrayList;
import java.util.Random;

 

import android.app.*;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.res.Resources;
import android.graphics.*;
import android.os.*;
import android.util.*;
import android.view.*;
import android.view.SurfaceHolder.Callback;
import android.view.ViewGroup.MarginLayoutParams;
import android.widget.AbsoluteLayout;
import android.widget.ImageView;
public class been extends Activity { 
 
   static Bitmap bitmap1,bitmap2;
 
    protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(new been1(this));
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);     
 
 
}
       
     static public class been1  extends SurfaceView implements Runnable,Callback
    {
      
       
      SurfaceHolder surfaceHolder;
     float x=0,y=30;
     int width,height;
     static boolean flag;

      static  boolean isRunning=true,isRight = true;
    
     private static Canvas canvas=new Canvas();
     private Paint p=new Paint();
     private Bitmap bitmap;
     private float screenW,screenH;
 
     Handler handler;
        static int dx;
        static int left=0;
     Thread th=new Thread(this);
    
public been1(Context context) {
super(context);
surfaceHolder=this.getHolder();
surfaceHolder.addCallback(this);
p.setAntiAlias(true);
this.setKeepScreenOn(true); 
bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.been);
 
setFocusable(true);
setFocusableInTouchMode(true);


}
public void onDraw()
{
super.onDraw(canvas);

bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.garden);
bitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.been);
bitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.leftbeen);
canvas.drawBitmap(bitmap,0,0,null);
if(isRight){
canvas.drawBitmap(bitmap1, x, y, p);
}
else {
canvas.drawBitmap(bitmap2, x, y, p);
}

 

if(true){
y=30;
}
}



public void run() {
// TODO Auto-generated method stub
 
while(isRunning){
if(x>getWidth()-55){
isRight = false;
}
if(x<0){
isRight = true;
}
if(isRight){
x += 10;
}
else {
x -= 10;
}
canvas=surfaceHolder.lockCanvas(); 
onDraw();
surfaceHolder.unlockCanvasAndPost(canvas); 
    

try
{
Thread.sleep(10);
}catch(InterruptedException e)
{
e.printStackTrace();
}
 
}
    }
     
     
     public boolean onTouchEvent(MotionEvent event) {
      
      
      if(event.getAction()==MotionEvent.ACTION_DOWN){  
      flag=true;
      
      x=event.getX();
      
      y=event.getY();
      
      
      
      }else if(event.getAction()==MotionEvent.ACTION_UP){ 
      flag=true;
      
      
    
      }else if(event.getAction()==MotionEvent.ACTION_MOVE){ 
      flag=true;
      x=event.getX();
      
      y=event.getY();
      
      
      
      }
     
      return true;   
      
     }
     
     public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {
      // TODO Auto-generated method stub
      
     }
     
     public void surfaceCreated(SurfaceHolder arg0) {
      // TODO Auto-generated method stub
      width=this.getWidth();
      
      height=this.getHeight();
      
      th.start();
 
      
     }
     public void surfaceDestroyed(SurfaceHolder arg0) {
      // TODO Auto-generated method stub
      isRunning=false;
 
     }
     
   
    }
    
} --------------------编程问答--------------------
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,