Basically just want to draw two circles (one red, one blue) and make them rotate with the rotate animation. Trying for days already but without any success.
Tried also to just move the animation method into the GameView class but it didn't work there either.
Currently it just crashes on onTouch. Here's my code so far:
GameScreen
public class GameScreen extends Activity {
private GameView myGameView;
private DrawThread drawThread ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game_screen);
myGameView = (GameView) (findViewById(R.id.gameView1));
myGameView.setZOrderOnTop(true);
myGameView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
}
public boolean onTouchEvent(MotionEvent e) {
int eventaction = e.getAction();
switch (eventaction) {
case MotionEvent.ACTION_DOWN:
System.out.println("Clicked");
myGameView.rotate(myGameView);
myGameView.invalidate();
break;
}
return true;
}
}
GameView
public class GameView extends SurfaceView implements
SurfaceHolder.Callback {
private BleenCatcher blueCatcher;
private BleenCatcher redCatcher;
private DrawThread drawThread;
private int colorBlue = -16776961;
private int colorRed = -65536;
public GameView(Context context) {
super(context);
initialize();
}
public GameView(Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
public GameView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initialize();
}
private void initialize() {
getHolder().addCallback(this);
drawThread = new DrawThread(getHolder(), this);
setFocusable(true);
}
public void surfaceCreated(SurfaceHolder holder) {
blueCatcher = new BleenCatcher(540, 850, colorBlue);
redCatcher = new BleenCatcher(540, 950, colorRed);
drawThread.setRunning(true);
drawThread.start();
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int
arg3) {
// TODO Auto-generated method stub
}
public void surfaceDestroyed(SurfaceHolder arg0) {
boolean retry = true;
drawThread.setRunning(false);
while (retry) {
try {
drawThread.join();
retry = false;
} catch (InterruptedException e) { }
}
}
public void onDraw(Canvas canvas) {
redCatcher.onDraw(canvas);
blueCatcher.onDraw(canvas);
}
public void rotate(GameView game ){
redCatcher.changePosition(game);
blueCatcher.changePosition(game);
}
}
BleenCatcher
public class BleenCatcher {
int x, y, rad = 50;
private Animation anima;
private boolean rotate = false;
private GameView myGameView;
BleenPaint catcherPaint;
public BleenCatcher(int x, int y, int color) {
this.x = x;
this.y = y;
catcherPaint = new BleenPaint(1, Paint.Cap.SQUARE, Paint.Style.FILL,
color);
}
public void onDraw(Canvas canvas) {
if(rotate){
canvas.drawCircle(x, y, rad, catcherPaint);
createAnimation(canvas);
rotate = false;
}else{
canvas.drawCircle(x, y, rad, catcherPaint);
}
}
public void changePosition(GameView game){
rotate = true;
myGameView = game;
}
protected void createAnimation(Canvas canvas) {
anima = new RotateAnimation(0, 180, 540 , 850);
anima.setRepeatMode(Animation.RESTART);
anima.setRepeatCount(Animation.INFINITE);
anima.setDuration(1000L);
myGameView.startAnimation(anima);
}
}
DrawThread
public class DrawThread extends Thread {
private SurfaceHolder surfaceHolder;
private GameView surfaceView;
private boolean run = false;
public DrawThread(SurfaceHolder surfaceHolder, GameView surfaceView) {
this.surfaceHolder = surfaceHolder;
this.surfaceView = surfaceView;
run = false;
}
public void setRunning(boolean run) {
Log.d("setRunning@DrawThread", "Run status is " + run);
this.run = run;
}
@Override
public void run() {
Canvas canvas = null;
while (run) {
try {
canvas = surfaceHolder.lockCanvas(null);
synchronized (surfaceHolder) {
surfaceView.onDraw(canvas);
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}
BleenPaint
public class BleenPaint extends Paint {
public BleenPaint(int strokeWidth, Paint.Cap cap, Paint.Style style,
int color) {
setStrokeWidth(strokeWidth);
setAntiAlias(true);
setStrokeCap(cap);
setStyle(style);
setColor(color);
}
}
Any help is appreciated.
Make a anim folder in res and make a flipping.xml like this and use that in your class.
Like this in your code & manage time for how much time you want the animation.