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