SurfaceView使用总结

本文介绍了一种在Android应用中实现视图刷新的方法,包括响应触摸事件时触发视图重画,以及如何在子线程中安全地更新UI组件。通过创建带有Looper和Handler的自定义线程,确保了UI更新操作不会阻塞主线程。
一,简单使用
可见以下链接,比较详细


二,刷新View
比如点击view时需要它重画

   
  1. @Override
  2. public boolean onTouchEvent(MotionEvent event) {
  3. switch (event.getAction()) {
  4. case MotionEvent.ACTION_DOWN:
  5. case MotionEvent.ACTION_MOVE:
  6. mXCross = event.getX();
  7. mCrossEnabled = true;
  8. // 重绘
  9. if(myThread!=null && myThread.myHandler != null) {
  10. myThread.myHandler.sendEmptyMessage(0);
  11. }
  12. // Log.e("on mXCross,mYCross==",mXCross + "," + mYCross);
  13. break;
  14. case MotionEvent.ACTION_UP :
  15. mXCross = -1f;
  16. mCrossEnabled = false;
  17. // 重绘
  18. if(myThread!=null && myThread.myHandler != null) {
  19. myThread.myHandler.sendEmptyMessage(0);
  20. }
  21. break;
  22. }
  23. return true;
  24. }

在子线程中绘制View,需要线程绑定一个Looper,需要handler

   
  1. // 线程内部类
  2. class MyThread extends Thread {
  3. private SurfaceHolder holder;
  4. private StockDrawWave drawWave;
  5. MyHandler myHandler;// 用户子线程绘制UI
  6. public MyThread(SurfaceHolder holder, StockDrawWave drawWave) {
  7. this.holder = holder;
  8. this.drawWave = drawWave;
  9. }
  10. class MyHandler extends Handler {
  11. @Override
  12. public void handleMessage(Message msg) {
  13. drawTimeChar();// 以后刷新时都直接执行绘制方法
  14. }
  15. }
  1. @Override
  2. public void run() {// 此处为初始化,第一次绘制时运行
  3. Looper.prepare();// Looper与Thread绑定
  4. myHandler = new MyHandler();// 与Looper绑定
  5. drawTimeChar();
  6. Looper.loop();// 处理消息
  7. }

View关闭时,终止线程并让其被回收

   
  1. @Override
  2. public void surfaceDestroyed(SurfaceHolder holder) {
  3. if (myThread != null) {
  4. myThread.isRun = false;
  5. myThread.myHandler.getLooper().quit();// 终止looper循环,让线程可以被回收
  6. myThread = null;
  7. }
  8. }






转载于:https://www.cnblogs.com/chenchengzhi/p/4915230.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值