大家帮忙看一下这个程序,我已经实现了图像能够按照一定的路径移动,但是我单机屏幕时图像为什么不停止运动呢,怎么实现当我触屏时图像能随着我的手指的移动而改变方向,而不是按照原来的方向啊,谢谢大家啊,请求高手指点,最好有代码,,谢啦!
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;
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();
}
}
解决方案 »
- 网易客户端消息推送
- listview滑动的时候报错java.lang.IllegalArgumentException
- android显示图片怎么做????????????????????
- Google API和SDK之间有什么关系?
- 关于程序启动问题
- android 模拟器获取网络数据
- android project 和 android test project
- 给同学在eclipse中安装Android开发的虚拟机遇到的问题。。。求大神解答
- AndEngine截图的问题
- 如何在activity运行前绑定service
- 在adb shell执行了一下chmod -R 777 /system/*,结果不能root了,求解如何重获root?
- 新手求教
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;
}
}
}