Нужна помощь в анимации движущейся линии с помощью onDraw() – JAVAJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Нужна помощь в анимации движущейся линии с помощью onDraw() – JAVA

Сообщение Anonymous »

Я создал линию с помощью метода drawLine, которая начинается снизу и доходит до половины размера экрана.
Пока все хорошо. Теперь я захотел "наклонять" линию влево или вправо при нажатии на экран.
На картинке примерно так:

Изображение


И при повторном нажатии он наклонится назад к другая сторона и так далее.
Проблема, с которой я сейчас столкнулся, заключается в том, что когда я наклоняю линию, ее «след» виден, потому что я вызываю метод drawLine несколько раз.

Это мой код:

Код: Выделить всё

public class MainGamePanel extends SurfaceView implements SurfaceHolder.Callback {
private static final String TAG = MainGamePanel.class.getSimpleName();

private MainThread thread;
private Paint paint;
private GameLine gameLine;

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

getHolder().addCallback(this);

setFocusable(true);
paint = new Paint();
paint.setStrokeWidth(50);
paint.setColor(Color.WHITE);
gameLine = new GameLine(getWidth()/2,getHeight(),getWidth()/2, getHeight()/2,paint);

thread = new MainThread(getHolder(), this);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}
@Override
public void surfaceCreated(SurfaceHolder holder) {
thread.setRunning(true);
thread.start();
gameLine = new GameLine(getWidth()/2,getHeight(),getWidth()/2, getHeight()/2,paint);

}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
...}
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
gameLine.setTapped(true);
}
return super.onTouchEvent(event);
}

public void render(Canvas canvas) {
gameLine.drawTheLine(canvas);
}
public void update(){
gameLine.update();
}}

public class MainThread extends Thread {

private boolean running;
private MainGamePanel gamePanel;
private SurfaceHolder surfaceHolder;

public MainThread(SurfaceHolder surfaceHolder, MainGamePanel gamePanel){
super();
this.gamePanel=gamePanel;
this.surfaceHolder = surfaceHolder;
}

public void setRunning(boolean running){
this.running = running;
}
@Override
public void run(){
Canvas canvas;
while (running){
canvas = null;
try {
canvas = this.surfaceHolder.lockCanvas();
synchronized (surfaceHolder){
this.gamePanel.update();
this.gamePanel.render(canvas);
}
}finally {
if(canvas != null){
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}}
public class GameLine {

private float startX;
private float startY;
private float stopX;
private float stopY;
private Paint paint;
private boolean tapped = false;

public GameLine(float startX, float startY, float stopX, float stopY, Paint paint) {
Normal Constructor
}
public boolean getTapped(){
return tapped;
}
public void setTapped(boolean tapped){
this.tapped = tapped;
}
public void update(){
if(tapped){
this.stopX -=1;
}
}
public void drawTheLine(Canvas canvas){

canvas.drawLine(startX, startY,stopX, stopY,paint);
}}
Ищу любые идеи. Я попробовал это неправильно?
Как сделать след невидимым?
Я благодарен за любую помощь. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/366 ... ndraw-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»