AndroidDev 板


LINE

需求大概是 User这边用一个个的指令 去画出Surfaceview上面的图&文字 当然前面的指令画出来的後面不能够消失 因为跟时间没啥关系,所以我是想不要用Thread来做 我自己测试成功的测试小程式 主要的function是: Canvas canvas; public void draw() { synchronized (myholder) { canvas = myholder.lockCanvas(new Rect(0, 0, sizeMetrics.widthPixels, sizeMetrics.heightPixels)); canvas.drawCircle(x, y, 30, paint); myholder.unlockCanvasAndPost(canvas); myholder.lockCanvas(new Rect(0, 0, 0, 0)); myholder.unlockCanvasAndPost(canvas); myholder.lockCanvas(new Rect(0, 0, 0, 0)); myholder.unlockCanvasAndPost(canvas); } } ---- 下面那个lock unlock 我猜测是因为double buff的关系 加入了以後 画圆形才会正常显示 这段code跑出来的结果很正常(在模拟器上) 就是透过修改x y+Onclicklistener,让它有点分身的效果(旧的圆存在) ---- 测试成功之後, 我尝试把它的逻辑套用到工作上要用的code里 那段code长这样: Canvas canvas; public void draw(){ synchronized (myholder) { canvas = myholder.lockCanvas(new Rect(0, 0, sizeMetrics.widthPixels, sizeMetrics.heightPixels)); switch (operator) { case 0: canvas.scale(scale, scale); canvas.drawText(strClass.psString, strClass.x, strClass.y, paint); break; case 1: ...... } myholder.unlockCanvasAndPost(canvas); myholder.lockCanvas(new Rect(0, 0, 0, 0)); myholder.unlockCanvasAndPost(canvas); myholder.lockCanvas(new Rect(0, 0, 0, 0)); myholder.unlockCanvasAndPost(canvas); myholder.lockCanvas(new Rect(0, 0, 0, 0)); myholder.unlockCanvasAndPost(canvas); } } ---- ...... 是其他还没处理的功能先跳过 测试之後发现, (在手机上面测试) 以前画出来的文字,在上述的code下, 只会保留3次 输入第四次指令的时候 前3行文字就消失了 QQ 如果我把下面的lock/unlock加多 会变多次没错 但是这样治标不治本 而且我也不知道会叠到多少次指令aaa ---- 想请问一下 我想要用指令而不是定时去对SurfaceView作画的动作 以上这样的method问题出在哪里呢? 还是说 是实体机器跟模拟器的差异造成的? 如果是用Thread有办法做到指令修改吗? (也不是onclick 就是别的thread送过来的一串string而已..) 希望有大神看得懂这篇问题Q___Q 恳求解答 谢谢m(__.__)m --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.160.12.249
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1436984158.A.60C.html ※ 编辑: fish0112 (1.160.12.249), 07/16/2015 02:17:16
1F:→ cha122977: 先说thread的问题...可以用Looper+Handler传值 07/16 02:50
2F:→ cha122977: lock有给dirty rect的话 其它地方不会被洗掉 07/16 02:52
3F:→ cha122977: 所以看能不能只将要画的地方给lock就好… 07/16 02:52
4F:→ cha122977: 另外Canvas在用的时候应该和double buffering无关 07/16 02:53
5F:→ cha122977: 所以第一段是蛮诡异的…我没碰过这个问题 07/16 02:54
6F:→ cha122977: 若你是改在View.onDraw()内的话 要用invalidate()重画 07/16 03:01
7F:→ fish0112: onDraw的invalidate之前试过 每次都是清空重画 07/17 00:21
8F:→ fish0112: 只将要画的地方lock..drawText好难呀.......QQ 07/17 00:22
如果我想要在draw()这个function里面 一开始对一个bitmap作读取 canvas.draw...blabla 之後 最後在把画面存进去bitmap 请问这样子有可能实现吗? 先不管效能,这样的想法我也google了一段时间 没有找到什麽真的可以用(or自己看得懂|||)的片段code 有一个对岸文章标题写得很棒 http://blog.csdn.net/u010840444/article/details/43869697 结果实作下去完全画不出东西...窘 ※ 编辑: fish0112 (1.163.40.125), 07/17/2015 00:32:56
9F:→ fish0112: 对了,使用thread就没有底图青空的问题了吗? 07/17 00:36
10F:→ fish0112: 如果是,我大概又要继续寻找目标了.. 07/17 00:36
11F:→ cha122977: 可以 每次画都开新Bitmap 然後用drawBitmap画上旧的 07/17 12:35
12F:→ cha122977: 再画上你想追加的东西 07/17 12:36







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:e-shopping站内搜寻

TOP