Created
October 13, 2011 14:16
-
-
Save neufuture/1284319 to your computer and use it in GitHub Desktop.
Surface view for creating animated arcs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.freefallhighscore.circles; | |
import android.app.Activity; | |
import android.graphics.Bitmap; | |
import android.graphics.Canvas; | |
import android.graphics.Paint; | |
import android.graphics.RectF; | |
import android.os.Bundle; | |
import android.os.Handler; | |
import android.os.SystemClock; | |
import android.view.Gravity; | |
import android.view.View; | |
import android.view.ViewGroup.LayoutParams; | |
import android.view.animation.Animation; | |
import android.view.animation.AnimationSet; | |
import android.view.animation.AnimationUtils; | |
import android.view.animation.LinearInterpolator; | |
import android.view.animation.RotateAnimation; | |
import android.widget.ImageView; | |
import android.widget.RelativeLayout; | |
import android.widget.TextView; | |
public class CirclesActivity extends Activity { | |
/** Called when the activity is first created. */ | |
private Handler mHandler = new Handler(); | |
TextView tv; | |
DrawCanvas canvasView; | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.main); | |
RelativeLayout wheel = (RelativeLayout) findViewById(R.id.wheel); | |
canvasView = new DrawCanvas(this); | |
wheel.addView(canvasView); | |
} | |
@Override | |
protected void onResume() { | |
// TODO Auto-generated method stub | |
super.onResume(); | |
canvasView.onResumeMySurfaceView(); | |
} | |
@Override | |
protected void onPause() { | |
// TODO Auto-generated method stub | |
super.onPause(); | |
canvasView.onPauseMySurfaceView(); | |
} | |
private Runnable mUpdateTimeTask = new Runnable() { | |
long start = SystemClock.uptimeMillis(); | |
public void run() { | |
long millis = SystemClock.uptimeMillis() - start; | |
canvasView.slice = millis/20000.0; | |
//tv.setText(String.valueOf(canvasView.slice)); | |
if(millis<20000) mHandler.postAtTime(this, start + millis); | |
else{ | |
mHandler.removeCallbacks(mUpdateTimeTask); | |
} | |
} | |
}; | |
public void go(View view){ | |
mHandler.removeCallbacks(mUpdateTimeTask); //Remove old timer | |
mHandler.postDelayed(mUpdateTimeTask, 100); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.freefallhighscore.circles; | |
import java.util.Random; | |
import android.R.color; | |
import android.content.Context; | |
import android.graphics.Bitmap; | |
import android.graphics.BitmapFactory; | |
import android.graphics.Canvas; | |
import android.graphics.Paint; | |
import android.graphics.PixelFormat; | |
import android.graphics.RectF; | |
import android.util.AttributeSet; | |
import android.view.SurfaceHolder; | |
import android.view.SurfaceHolder.Callback; | |
import android.view.SurfaceView; | |
class DrawCanvas extends SurfaceView implements Runnable{ | |
Thread thread = null; | |
SurfaceHolder surfaceHolder; | |
volatile boolean running = false; | |
public double slice; | |
public DrawCanvas(Context context) { | |
super(context); | |
// TODO Auto-generated constructor stub | |
surfaceHolder = getHolder(); | |
} | |
public void onResumeMySurfaceView(){ | |
running = true; | |
thread = new Thread(this); | |
thread.start(); | |
} | |
public void onPauseMySurfaceView(){ | |
boolean retry = true; | |
running = false; | |
while(retry){ | |
try { | |
thread.join(); | |
retry = false; | |
} catch (InterruptedException e) { | |
// TODO Auto-generated catch block | |
e.printStackTrace(); | |
} | |
} | |
} | |
public void run() { | |
// TODO Auto-generated method stub | |
while(running){ | |
if(surfaceHolder.getSurface().isValid()){ | |
surfaceHolder.setFormat(PixelFormat.TRANSPARENT); | |
Canvas canvas = surfaceHolder.lockCanvas(); | |
Paint mPaints = new Paint(); | |
mPaints.setAntiAlias(true); | |
//mPaints.setStyle(Paint.Style.FILL); | |
mPaints.setColor(0x8800FF00); | |
RectF bounds= new RectF( 0, 0, 100, 100); | |
canvas.drawArc(bounds, -90, (float) (slice*360), true, mPaints); | |
surfaceHolder.unlockCanvasAndPost(canvas); | |
} | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
android:layout_width="fill_parent" | |
android:layout_height="fill_parent" | |
android:background="#bbbbbb" | |
> | |
<RelativeLayout | |
android:id="@+id/wheel" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:layout_marginLeft="20dip" | |
android:layout_marginBottom="20dip" | |
android:layout_alignParentBottom="true" | |
/> | |
<Button | |
android:id="@+id/btn" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="Touch Me" | |
android:onClick="go" | |
/> | |
</RelativeLayout> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment