android 之 回调函数
来源:互联网 发布:淘宝店铺押金怎么交 编辑:程序博客网 时间:2024/05/16 05:33
目标:
实现一个自定义的MyThread 类,定义多个其实例,
每个实例调用不同的draw()。
失误点:
canvas 不是传递进来的! 是 通过holder lock得到!!!!!!!!!!!!!!!!!!!
canvas //canvas最易出错! 因为它的初始化是在holder.lock
关于多线程的实现:
thMain = new MyThread(6,1000, myInterface );
这里多了一个回调接口作为参数;
public interface myInterface {public void myIFfun();}
然后再 自定义一个 实现该接口的类叫做 比如 ClassGrassDraw,并在它的myIFfun()中去实现自定义的draw的动作。
以此类推。如此,即实现多个不同的 画的 线程 就实现了。
附代码:
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(new mySur(this));}}
public interface myInterface {public void InterfaceFun();}
public class MyThread extends Thread{private int WholeTime;private int PerTime;private boolean thFlag;private int counter;private mySur Sur; //为了使用其成员WholeThreadFlagprivate myInterface CallBackObj; public MyThread(int WholeTime, int PerTime, myInterface CallBackObj, mySur Sur){this.WholeTime = WholeTime;this.PerTime = PerTime;this.CallBackObj = CallBackObj;this.Sur = Sur;thFlag = true;counter = 0;}private void setTimer(){if(WholeTime != 0){counter += 1;if(counter * PerTime >= WholeTime * 1000){thFlag = false;System.out.println("Timer!! thread exit! ");}}}@Overridepublic void run(){while(Sur.WholeThreadFlag && thFlag){try {CallBackObj.InterfaceFun();// 包含draw 和 logicThread.sleep(PerTime);setTimer();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
import android.content.Context;import android.graphics.Color;import android.graphics.Paint;import android.view.SurfaceHolder;import android.view.SurfaceHolder.Callback;import android.view.SurfaceView;public class mySur extends SurfaceView implements Callback{protected SurfaceHolder holder;protected Paint paint;protected int screenW, screenH;boolean WholeThreadFlag;private MyThread mainThread;private MainDraw mainDraw; public mySur(Context context) {super(context);// TODO Auto-generated constructor stubholder = getHolder();holder.addCallback(this);paint = new Paint();paint.setColor(Color.WHITE);//bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.ic_launcher);}@Overridepublic void surfaceCreated(SurfaceHolder arg0) {// TODO Auto-generated method stubscreenW = getWidth();screenH = getHeight();WholeThreadFlag = true;mainDraw = new MainDraw(this.getContext(),holder,paint);mainThread = new MyThread(0,50,mainDraw,this);mainThread.start();}@Overridepublic void surfaceDestroyed(SurfaceHolder arg0) {// TODO Auto-generated method stubWholeThreadFlag = false;}@Overridepublic void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {// TODO Auto-generated method stub}}
import android.content.Context;import android.graphics.Canvas;import android.graphics.Paint;import android.view.SurfaceHolder;public class MainDraw extends mySur implements myInterface{private Canvas canvas;public MainDraw(Context context, SurfaceHolder holder, Paint paint) {super(context);// TODO Auto-generated constructor stubthis.holder = holder;this.paint = paint;}private void reallyDraw(){canvas.drawRect(0, 0, 100, 100, paint);//System.out.println("hhhhhhhhhhhhhello,world!");}private void logic(){}private void draw(){try{canvas = holder.lockCanvas();if(canvas != null){reallyDraw();}}catch(Exception e){}finally{if(canvas != null){holder.unlockCanvasAndPost(canvas);}}}@Overridepublic void InterfaceFun() {// TODO Auto-generated method stubdraw();logic();}}
参考:
http://wenku.baidu.com/view/4a4022a4284ac850ad024289.html
http://wenku.baidu.com/view/78f2cb10866fb84ae45c8d8b.html
- android 之 回调函数
- android之回调函数的意义
- android回调函数
- android回调函数
- Android回调函数
- android回调函数
- Android学习笔记之java中的回调函数
- Android学习笔记之java中的回调函数
- Android学习笔记之java中的回调函数
- android架构设计基础之回调函数
- android之回调函数的用法和意义
- Android开发之Handler(五)回调函数拦截
- Android 回调函数学习之图片压缩保存
- android之回调函数的用法和意义
- android之回调函数的用法和意义
- android之回调函数的用法和意义
- 回调函数之精神
- 回调函数之精神
- Android游戏快速入门(一):基础储备
- 第7周项目1-求两并联电阻阻值
- HTTP 协议中GET和POST到底有哪些区别
- 抽象类、虚函数、纯虚函数、接口、多态、继承(多位置转载外加自己的一点代码)
- [Python]一则应用
- android 之 回调函数
- 本地管理表空间(LMT)与自动段空间管理(ASSM)概念(未看)
- 第7周项目-求圆柱表面积
- 求二进制数中1的个数
- sprintf
- 我的c++
- 运行在单独进程中的ContentProvider
- STL VS standard library
- 减少.NET应用程序内存占用的一则实践