SurfaceViewDeamon
4021 ワード
activity:
package com.example.surfaceviewdeamon;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MySurfaceView m=new MySurfaceView(this);
setContentView(m);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
sufaceview: package com.example.surfaceviewdeamon;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.util.Log;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback{
private SurfaceHolder sfh;
private Mythread m_thread;
private boolean flag;
private float x=10;
private float y=10;
private float cx=200;
private float cy=200;
private float degree;
private Paint pen;
private Canvas canvas;
private Bitmap bmp;
public MySurfaceView(Context context) {
super(context);
Log.i("Tag","surface ");
// TODO Auto-generated constructor stub
Init();
}
public void Init(){
sfh=getHolder();
sfh.addCallback(this);
bmp=BitmapFactory.decodeResource(getResources(), R.drawable.hey);
pen=new Paint();
pen.setStrokeWidth(20);
pen.setColor(Color.GREEN);
canvas=new Canvas();
degree=0;
}
public void MyOnDraw(){
try{
canvas=sfh.lockCanvas();
if(canvas!=null){
// pen.setColor(Color.GREEN);
// canvas.drawPoint(x, y, pen);
// pen.setColor(Color.BLACK);
// canvas.drawRect(0, 0, this.getWidth(), this.getHeight(), pen);
// pen.setColor(Color.BLUE);
// canvas.save();
// canvas.rotate(degree, cx+bmp.getWidth()/2, cy+bmp.getHeight()/2);
// canvas.drawBitmap(bmp, cx, cy,pen);
// canvas.restore();
// canvas.drawText(" :"+degree, 155, 100, pen);
Matrix mx=new Matrix();
canvas.drawBitmap(bmp, cx, cy, pen);
mx.postRotate(degree, bmp.getWidth()/2, bmp.getHeight()/2);
mx.postTranslate(cx, cy);
canvas.drawBitmap(bmp, mx, pen);
}
}catch(Exception e){
}finally{
if(canvas!=null){
sfh.unlockCanvasAndPost(canvas);
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
Log.i("Tag","surfaceChange");
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
Log.i("Tag","surfaceCreate");
flag=true;
m_thread=new Mythread();
m_thread.start();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction()==MotionEvent.ACTION_DOWN){
x=event.getX();
y=event.getY();
System.out.println("downing..........");
}
if(event.getAction()==MotionEvent.ACTION_MOVE){
x=event.getX();
y=event.getY();
}
return true;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
Log.i("Tag","surfaceDestroyed");
flag=false;
}
class Mythread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
while(flag){
long start=System.currentTimeMillis();
MyOnDraw();
degree=(degree+1)%360;
long end=System.currentTimeMillis();
try {
if(end-start<50){
Thread.sleep(50-end+start);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}