Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android java应用程序,取代触摸屏上的图像_Java_Android - Fatal编程技术网

Android java应用程序,取代触摸屏上的图像

Android java应用程序,取代触摸屏上的图像,java,android,Java,Android,我只想说我对java应用程序开发非常陌生 因此,我让这个图像漂浮在屏幕上,当我触摸屏幕时,我希望图像改变颜色(从图像切换到图像1) 我得到这个工作,但图像移动到起点,我希望过渡是平滑的,并发生在图像在某一点 我的GameView.java类中有这段代码 public class GameView extends SurfaceView implements SurfaceHolder.Callback { private MainThread thread; private Character

我只想说我对java应用程序开发非常陌生

因此,我让这个图像漂浮在屏幕上,当我触摸屏幕时,我希望图像改变颜色(从图像切换到图像1) 我得到这个工作,但图像移动到起点,我希望过渡是平滑的,并发生在图像在某一点

我的GameView.java类中有这段代码

public class GameView extends SurfaceView implements SurfaceHolder.Callback {

private MainThread thread;
private CharacterSprite characterSprite;
private int col = 0;

public GameView(Context context){
    super(context);

    getHolder().addCallback(this);

    thread = new MainThread(getHolder(),this);
    setFocusable(true);
}



@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

}

@Override
public void surfaceCreated(SurfaceHolder holder){
characterSprite = new CharacterSprite(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen), 100, 100);
thread.setRunning(true);
thread.start();

}

@Override
public void surfaceDestroyed(SurfaceHolder holder){
    boolean retry = true;
    while(retry){
        try{
            thread.setRunning(false);
            thread.join();
        }catch(InterruptedException e){
            e.printStackTrace();
        }
        retry = false;
    }
}

public void update(){
    characterSprite.update();


}
public boolean onTouchEvent(MotionEvent event) {

    int X = (int) event.getX();
    int Y = (int) event.getY();
    int eventaction = event.getAction();

    switch (eventaction) {
        case MotionEvent.ACTION_DOWN:
            if(col == 0){
                int ox = characterSprite.getX();
                int oy = characterSprite.getY();
                characterSprite.setX(ox);
                characterSprite.setX(oy);
                characterSprite = new CharacterSprite(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen1), ox, oy);

                Toast.makeText(getContext(), "ACTION_UP "+"X: "+ox+" Y: "+oy, Toast.LENGTH_LONG).show();

                col = 1;
            }else{
                int ox = characterSprite.getX();
                int oy = characterSprite.getY();
                characterSprite.setX(ox);
                characterSprite.setX(oy);
                characterSprite = new CharacterSprite(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen), ox, oy);

                Toast.makeText(getContext(), "ACTION_UP "+"X: "+ox+" Y: "+oy, Toast.LENGTH_LONG).show();
                col = 0;
            }


            break;

        case MotionEvent.ACTION_MOVE:

            break;

        case MotionEvent.ACTION_UP:

            break;
    }
    return true;
}
@Override
public void draw(Canvas canvas){
    super.draw(canvas);
    if(canvas!=null){
        characterSprite.draw(canvas);
    }
}
这是大部分工作进行的地方,我还有CharacterSprite.java类,它基本上创建了“图像”,并使其在屏幕上浮动:

public class CharacterSprite {
private Bitmap image;
private int x,y;
private int xVelocity = 10;
private int yVelocity = 5;
private int screenWidth = Resources.getSystem().getDisplayMetrics().widthPixels;
private int screenHeight = Resources.getSystem().getDisplayMetrics().heightPixels;


public CharacterSprite(Bitmap bmp, int x, int y){

    image = bmp;

}


public int getX(){
    return x;
}

public int getY(){
    return y;
}

public void setX(int nx){
    x = nx;
}

public void setY(int ny){
    y = ny;
}

public void draw(Canvas canvas){
    canvas.drawBitmap(image,x,y,null);
}

public void update(){

    if(x < 0 && y < 0){
        x = screenWidth / 2;
        y = screenHeight / 2;
    }else{
    x += xVelocity;
    y += yVelocity;
    if((x > screenWidth - image.getWidth()) || (x < 0)){
        xVelocity = xVelocity*-1;
    }
    if((y > screenHeight - image.getHeight()) || (y < 0)){
        yVelocity = yVelocity*-1;
    }
 }

}
公共类CharacterSprite{
私有位图图像;
私有整数x,y;
私有int xVelocity=10;
私人住宅单位面积=5;
private int screenWidth=Resources.getSystem().getDisplayMetrics().widthPixels;
private int screenHeight=Resources.getSystem().getDisplayMetrics().heightPixels;
公共字符精灵(位图bmp,int x,int y){
图像=bmp;
}
公共int getX(){
返回x;
}
公共int getY(){
返回y;
}
公共无效集合x(整数nx){
x=nx;
}
公共空间设置(纽约州国际){
y=ny;
}
公共空白绘制(画布){
drawBitmap(图像,x,y,空);
}
公共无效更新(){
if(x<0&&y<0){
x=屏幕宽度/2;
y=屏幕高度/2;
}否则{
x+=x速度;
y+=y线性度;
如果((x>screenWidth-image.getWidth())| |(x<0)){
xVelocity=xVelocity*-1;
}
if((y>screenHeight-image.getHeight())| |(y<0)){
yVelocity=yVelocity*-1;
}
}
}
正如你所看到的,我试图获取当前的x和y,并在创建新角色时将其设置回原来的位置,但这不起作用,我猜这是因为有一秒钟图像不在屏幕上,整个事情都重置了,但1.我不确定这是否正确2.我不知道如何修复它。 如果有人能告诉我应该在哪里搜索,那就太棒了

@编辑: 我改为这个
Toast.makeText(getContext(),“ACTION_UP”+“X:”+characterSprite.getX()+“Y:”+characterSprite.getY(),Toast.LENGTH_LONG).show();

要调试,我得到的输出是
ACTION\u UP X:0 Y:0

应答

增加

public void updateD(Canvas canvas){
        canvas.drawBitmap(image,x,y,null);
}
CharacterSprite.java
并更改:

 if(col == 0){
                int ox =  550; //characterSprite.getX();
                int oy =  550;//characterSprite.getY();
               // characterSprite.setX(ox);
                //characterSprite.setX(oy);

                characterSprite = new CharacterSprite(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen1));

                Toast.makeText(getContext(), "ACTION_UP "+"X: "+characterSprite.getX()+" Y: "+characterSprite.getY(), Toast.LENGTH_LONG).show();

                col = 1;
            }
致:


这是答案吗ઽ૯ท 是的,我的坏朋友忘了在第一行加上它。
      if(col == 0){
                characterSprite.setImg(BitmapFactory.decodeResource(getResources(),R.drawable.avdgreen1));
                Toast.makeText(getContext(), "ACTION_UP "+"X: "+characterSprite.getX()+" Y: "+characterSprite.getY(), Toast.LENGTH_LONG).show();

                col = 1;
            }