2015-04-19 5 views
0

Я прихожу с Java, это не будет «Перерисовать», я имею в виду, что он не будет перемещать мой растровый рисунок туда, где кто-то нажимает на экран. В моем коде нет ничего плохого, logcat ничего мне не говорит, странно, что вчера он работал нормально, но теперь по какой-то причине это не сработает.Моя программа не будет «Перерисовать()»

Activity.class

package com.example.alex.something; 


    import android.app.Activity; 
    import android.os.Bundle; 

    public class Animation extends Activity { 

private AnimationThread a; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    a = new AnimationThread(this); 
    setContentView(a); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    a.pause(); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    a.resume(); 
} 
    } 

AnimationThread.class

package com.example.alex.something; 

    import android.content.Context; 
    import android.view.*; 

    import android.graphics.*; 

    public class AnimationThread extends SurfaceView implements Runnable{ 

private Thread thread = null; 
private SurfaceHolder holder; 
private Boolean runnable = false; 
private Bitmap ball; 
private float x,y; 

public AnimationThread(Context context) { 
    super(context); 
    ball = BitmapFactory.decodeResource(getResources(),R.drawable.redball); 
    x=0; y=0; 
    holder = getHolder(); 
} 

@Override 
public void run() { 
    while(runnable==true){ 
     if(!holder.getSurface().isValid()){ 
      continue; 
     } 
     Canvas c = holder.lockCanvas(); 
     c.drawBitmap(ball,x-ball.getWidth()/2,y-ball.getHeight()/2,null); 
     holder.unlockCanvasAndPost(c); 
    } 

} 

public void pause(){ 
    runnable=false; 
    while(true){ 
     try{ 
      thread.join(); 
     } 
     catch(InterruptedException e){ 
      e.getStackTrace(); 

     } 

    } 

} 

public void resume(){ 
    runnable=true; 
    thread = new Thread(this); 
    thread.start(); 

} 


public MotionListener getListener(){MotionListener a = new MotionListener(); return a;} 


private class MotionListener implements OnTouchListener{ 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     x= event.getX(); 
     y= event.getY(); 
     return false; 
    } 
} 

      } 

Опять же, насколько я знаю, что нет ничего плохого в мой код, может быть, кто-то более опытный могуществе быть в состоянии увидеть что-то, также возможно, что-то может быть неправильно с моим эмулятор, он работал хорошо вчера?

+0

@Tom Это запущено в 'onResume()' в действии. – alenz316

+0

@Tom Yea, я сделал это так, чтобы он мог «перекрасить» его в новое место, когда кто-то нажимает на экран, так как я не уверен, что у андроида есть метод перерисовки. –

+0

@ alenz316 Да, уже замечен. Действительно скрыт. @AlexSmith Ваш метод 'AnimationThread # pause' выглядит действительно подозрительным ... почему существует бесконечный цикл? – Tom

ответ

0

Это не похоже на ваш набор слушателей прикосновений. У вас есть класс OnTouchListener и геттер, но вы никогда не видели setOnTouchListener(listener).

+0

Да, это сработало спасибо, теперь у вас есть идея, почему он просто рисует новое изображение вместо того, чтобы переустановить существующий на моем экране? –

+0

При рисовании на холст он просто рисует все, что вы ему рассказываете. Он не подозревает, что вы хотите «переместить» это растровое изображение. Вы можете думать об этом как о «штамповке» холста с вашим изображением «штамп». Чтобы получить желаемое поведение, вам нужно очистить холст. см. http://stackoverflow.com/questions/6956838/how-to-erase-previous-drawing-on-canvas – alenz316

+0

Кроме того, вы не должны рисовать, если что-то не изменилось. например если ваши x или y изменились. ;) – alenz316

Смежные вопросы