{"id":205240,"date":"2023-08-07T10:39:18","date_gmt":"2023-08-07T02:39:18","guid":{"rendered":"https:\/\/www.idc.net\/help\/205240\/"},"modified":"2023-08-07T10:39:18","modified_gmt":"2023-08-07T02:39:18","slug":"android-%e8%ae%a9%e6%b8%b8%e6%88%8f%e4%ba%ba%e7%89%a9%e5%9c%a8%e5%b1%8f%e5%b9%95%e4%b8%8a%e6%98%be%e7%a4%ba","status":"publish","type":"post","link":"https:\/\/idc.net\/help\/205240\/","title":{"rendered":"Android \u8ba9\u6e38\u620f\u4eba\u7269\u5728\u5c4f\u5e55\u4e0a\u663e\u793a"},"content":{"rendered":"<p><strong>Java\u4ee3\u7801\uff1a<\/strong><\/p>\n<pre>\n \n \n <ol>\n  \n  \n  <li><span><span>package&nbsp;eoe.demo;&nbsp;&nbsp;&nbsp;<\/span><\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.content.Context;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.content.res.Resources;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.graphics.Bitmap;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.graphics.BitmapFactory;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.graphics.Canvas;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.graphics.Color;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.graphics.Paint;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.util.Log;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.view.KeyEvent;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.view.SurfaceHolder;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.view.SurfaceView;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>import&nbsp;android.view.SurfaceHolder.Callback;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;class&nbsp;MySurfaceView&nbsp;extends&nbsp;SurfaceView&nbsp;implements&nbsp;Callback,&nbsp;Runnable&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;Thread&nbsp;<\/span><span>th<\/span><span>&nbsp;=&nbsp;<\/span><span>new<\/span><span>&nbsp;Thread(this);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;SurfaceHolder&nbsp;sfh;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;int&nbsp;SH,&nbsp;SW;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;Canvas&nbsp;canvas;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;Paint&nbsp;p;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;Paint&nbsp;p2;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;Resources&nbsp;res;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;Bitmap&nbsp;bmp;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;int&nbsp;<\/span><span>bmp_x<\/span><span>&nbsp;=&nbsp;<\/span><span>100<\/span><span>,&nbsp;<\/span><span>bmp_y<\/span><span>&nbsp;=&nbsp;<\/span><span>100<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;boolean&nbsp;UP,&nbsp;DOWN,&nbsp;LEFT,&nbsp;RIGHT;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;int&nbsp;animation_up[]&nbsp;=&nbsp;{&nbsp;3,&nbsp;4,&nbsp;5&nbsp;};&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;int&nbsp;animation_down[]&nbsp;=&nbsp;{&nbsp;0,&nbsp;1,&nbsp;2&nbsp;};&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;int&nbsp;animation_left[]&nbsp;=&nbsp;{&nbsp;6,&nbsp;7,&nbsp;8&nbsp;};&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;int&nbsp;animation_right[]&nbsp;=&nbsp;{&nbsp;9,&nbsp;10,&nbsp;11&nbsp;};&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;int&nbsp;animation_init[]&nbsp;=&nbsp;animation_down;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>private&nbsp;int&nbsp;frame_count;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;MySurfaceView(Context&nbsp;context)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>super(context);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>this.setKeepScreenOn(true);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>res<\/span><span>&nbsp;=&nbsp;<\/span><span>this<\/span><span>.getResources();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>bmp<\/span><span>&nbsp;=&nbsp;<\/span><span>BitmapFactory<\/span><span>.decodeResource(res,&nbsp;R.drawable.enemy1);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>sfh<\/span><span>&nbsp;=&nbsp;<\/span><span>this<\/span><span>.getHolder();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>sfh.addCallback(this);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>p<\/span><span>&nbsp;=&nbsp;<\/span><span>new<\/span><span>&nbsp;Paint();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>p.setColor(Color.YELLOW);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>p2<\/span><span>&nbsp;=&nbsp;<\/span><span>new<\/span><span>&nbsp;Paint();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>p2.setColor(Color.RED);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>p.setAntiAlias(true);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>setFocusable(true);&nbsp;\/\/\u5907\u6ce81&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;void&nbsp;surfaceCreated(SurfaceHolder&nbsp;holder)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>SH<\/span><span>&nbsp;=&nbsp;<\/span><span>this<\/span><span>.getHeight();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>SW<\/span><span>&nbsp;=&nbsp;<\/span><span>this<\/span><span>.getWidth();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>th.start();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;void&nbsp;draw()&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas<\/span><span>&nbsp;=&nbsp;<\/span><span>sfh<\/span><span>.lockCanvas();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas.drawRect(0,&nbsp;0,&nbsp;SW,&nbsp;SH,&nbsp;p);&nbsp;\/\/\u5907\u6ce82&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas.save();&nbsp;\/\/\u5907\u6ce83&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas.drawText(\"Himi\",&nbsp;bmp_x-2,&nbsp;bmp_y-10,&nbsp;p2);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas.clipRect(bmp_x,&nbsp;bmp_y,&nbsp;bmp_x&nbsp;+&nbsp;bmp.getWidth()&nbsp;\/&nbsp;13,&nbsp;bmp_y+bmp.getHeight());&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>if&nbsp;(<\/span><span>animation_init<\/span><span>&nbsp;==&nbsp;animation_up)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas.drawBitmap(bmp,&nbsp;bmp_x&nbsp;-&nbsp;animation_up[frame_count]&nbsp;*&nbsp;(bmp.getWidth()&nbsp;\/&nbsp;13),&nbsp;bmp_y,&nbsp;p);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(<\/span><span>animation_init<\/span><span>&nbsp;==&nbsp;animation_down)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas.drawBitmap(bmp,&nbsp;bmp_x&nbsp;-&nbsp;animation_down[frame_count]&nbsp;*&nbsp;(bmp.getWidth()&nbsp;\/&nbsp;13),&nbsp;bmp_y,&nbsp;p);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(<\/span><span>animation_init<\/span><span>&nbsp;==&nbsp;animation_left)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas.drawBitmap(bmp,&nbsp;bmp_x&nbsp;-&nbsp;animation_left[frame_count]&nbsp;*&nbsp;(bmp.getWidth()&nbsp;\/&nbsp;13),&nbsp;bmp_y,&nbsp;p);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(<\/span><span>animation_init<\/span><span>&nbsp;==&nbsp;animation_right)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas.drawBitmap(bmp,&nbsp;bmp_x&nbsp;-&nbsp;animation_right[frame_count]&nbsp;*&nbsp;(bmp.getWidth()&nbsp;\/&nbsp;13),&nbsp;bmp_y,&nbsp;p);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>canvas.restore();&nbsp;\/\/\u5907\u6ce83&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>sfh.unlockCanvasAndPost(canvas);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;void&nbsp;cycle()&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(DOWN)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmp_y&nbsp;+=&nbsp;5;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(UP)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;&nbsp;bmp_y&nbsp;<\/span><span>-<\/span><span>=&nbsp;<\/span><span>5<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(LEFT)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;&nbsp;bmp_x&nbsp;<\/span><span>-<\/span><span>=&nbsp;<\/span><span>5<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(RIGHT)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;&nbsp;bmp_x&nbsp;+=&nbsp;5;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>if&nbsp;(DOWN&nbsp;||&nbsp;UP&nbsp;||&nbsp;LEFT&nbsp;||&nbsp;RIGHT)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>if&nbsp;(frame_count&nbsp;<\/span><span>&lt;<\/span><span>&nbsp;<\/span><span>2<\/span><span>)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>frame_count++;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;<\/span><span>frame_count<\/span><span>&nbsp;=&nbsp;<\/span><span>0<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>if&nbsp;(<\/span><span>DOWN<\/span><span>&nbsp;==&nbsp;false&nbsp;&amp;&amp;&nbsp;<\/span><span>UP<\/span><span>&nbsp;==&nbsp;false&nbsp;&amp;&amp;&nbsp;<\/span><span>LEFT<\/span><span>&nbsp;==&nbsp;false&nbsp;&amp;&amp;&nbsp;<\/span><span>RIGHT<\/span><span>&nbsp;==&nbsp;false)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>frame_count<\/span><span>&nbsp;=&nbsp;<\/span><span>0<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>@Override&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;boolean&nbsp;onKeyDown(int&nbsp;key,&nbsp;KeyEvent&nbsp;event)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>if&nbsp;(<\/span><span>key<\/span><span>&nbsp;==&nbsp;KeyEvent.KEYCODE_DPAD_UP)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>if&nbsp;(<\/span><span>UP<\/span><span>&nbsp;==&nbsp;false)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>animation_init<\/span><span>&nbsp;=&nbsp;<\/span><span>animation_up<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;<\/span><span>UP<\/span><span>&nbsp;=&nbsp;<\/span><span>true<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(<\/span><span>key<\/span><span>&nbsp;==&nbsp;KeyEvent.KEYCODE_DPAD_DOWN)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>if&nbsp;(<\/span><span>DOWN<\/span><span>&nbsp;==&nbsp;false)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;<\/span><span>animation_init<\/span><span>&nbsp;=&nbsp;<\/span><span>animation_down<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;<\/span><span>DOWN<\/span><span>&nbsp;=&nbsp;<\/span><span>true<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(<\/span><span>key<\/span><span>&nbsp;==&nbsp;KeyEvent.KEYCODE_DPAD_LEFT)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>if&nbsp;(<\/span><span>LEFT<\/span><span>&nbsp;==&nbsp;false)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;<\/span><span>animation_init<\/span><span>&nbsp;=&nbsp;<\/span><span>animation_left<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>LEFT<\/span><span>&nbsp;=&nbsp;<\/span><span>true<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(<\/span><span>key<\/span><span>&nbsp;==&nbsp;KeyEvent.KEYCODE_DPAD_RIGHT)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;if&nbsp;(<\/span><span>RIGHT<\/span><span>&nbsp;==&nbsp;false)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;&nbsp;&nbsp;<\/span><span>animation_init<\/span><span>&nbsp;=&nbsp;<\/span><span>animation_right<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>RIGHT<\/span><span>&nbsp;=&nbsp;<\/span><span>true<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>return&nbsp;super.onKeyDown(key,&nbsp;event);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>\/*&nbsp;(non-Javadoc)&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>*&nbsp;@see&nbsp;android.view.View#onKeyUp(int,&nbsp;android.view.KeyEvent)&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>*\/&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>@Override&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;boolean&nbsp;onKeyUp(int&nbsp;keyCode,&nbsp;KeyEvent&nbsp;event)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>if&nbsp;(DOWN)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;<\/span><span>DOWN<\/span><span>&nbsp;=&nbsp;<\/span><span>false<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(UP)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;<\/span><span>UP<\/span><span>&nbsp;=&nbsp;<\/span><span>false<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(LEFT)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;<\/span><span>LEFT<\/span><span>&nbsp;=&nbsp;<\/span><span>false<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;else&nbsp;if&nbsp;(RIGHT)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>&nbsp;&nbsp;<\/span><span>RIGHT<\/span><span>&nbsp;=&nbsp;<\/span><span>false<\/span><span>;&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>return&nbsp;super.onKeyUp(keyCode,&nbsp;event);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>@Override&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;void&nbsp;run()&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>\/\/&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>while&nbsp;(true)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>draw();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>cycle();&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>try&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>Thread.sleep(100);&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>@Override&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;void&nbsp;surfaceChanged(SurfaceHolder&nbsp;holder,&nbsp;int&nbsp;format,&nbsp;int&nbsp;width,&nbsp;int&nbsp;height)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>\/\/&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>@Override&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>public&nbsp;void&nbsp;surfaceDestroyed(SurfaceHolder&nbsp;holder)&nbsp;{&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>\/\/&nbsp;TODO&nbsp;Auto-generated&nbsp;method&nbsp;stub&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;&nbsp;&nbsp;<\/span><\/li>\n  \n  \n  <li><span>}&nbsp;<\/span><span>&lt;\/<\/span><span>STRONG<\/span><span>&gt;<\/span><span>&nbsp;<\/span><\/li>\n \n \n <\/ol><\/pre>\n<p><strong>\u5907\u6ce81&nbsp;<\/strong><\/p>\n<p>\u6b64\u65b9\u6cd5\u662f\u7528\u6765\u54cd\u5e94\u6309\u952e\uff01\u5982\u679c\u662f\u81ea\u5df1\u5b9a\u4e49\u4e00\u4e2a\u7ee7\u627f\u81eaView\u7684\u7c7b,\u91cd\u65b0\u5b9e\u73b0onKeyDown\u65b9\u6cd5\u540e,\u53ea\u6709\u5f53\u8be5View\u83b7\u5f97\u7126\u70b9\u65f6\u624d\u4f1a\u8c03\u7528onKeyDown\u65b9\u6cd5,Actvity\u4e2d\u7684onKeyDown\u65b9\u6cd5\u662f\u5f53\u6240\u6709\u63a7\u4ef6\u5747\u6ca1\u6709\u5904\u7406\u8be5\u6309\u952e\u4e8b\u4ef6\u65f6,\u624d\u4f1a\u8c03\u7528.<\/p>\n<p><strong>\u5907\u6ce82<\/strong><\/p>\n<p>\u8fd9\u91cc\u4e5f\u662f\u5bf9\u5c4f\u5e55\u8fdb\u884c\u5237\u5c4f\u64cd\u4f5c\uff0c\u5176\u5b9e\u8fd9\u4e5f\u53ea\u662f\u4e00\u79cd\uff0c\u4e4b\u524d\u6587\u7ae0\u91cc\u6211\u4e5f\u7528\u5230drawRGB\u7684\u65b9\u6cd5\u540c\u6837\u5b9e\u73b0\uff0c\u5f53\u7136\u4e5f\u53ef\u4ee5\u7528fillRect\u7b49\u6765\u5237\u5c4f\u3002<\/p>\n<p>\u90a3\u4e48\u8fd9\u91cc\u6211\u60f3\u8bf4\u4e0b\uff0c\u5728\u7ee7\u627fview\u4e2d\uff0c\u56e0\u4e3aonDraw\u65b9\u6cd5\u662f\u7cfb\u7edf\u81ea\u52a8\u8c03\u7528\u7684\uff0c\u4e0d\u50cf\u5728surfaceview\u8fd9\u91cc\u8fd9\u6837\u53bb\u5728run\u91cc\u9762\u81ea\u5df1\u53bb\u4e0d\u65ad\u8c03\u7528\uff0c\u5728view\u4e2d\u6211\u4eec\u53ef\u4ee5\u62b5\u7528&nbsp;invalidate()\/postInvalidate()&nbsp;\u8fd9\u4e24\u79cd\u65b9\u6cd5\u5b9e\u73b0\u8ba9\u7cfb\u7edf\u8c03\u7528onDraw\u65b9\u6cd5\uff0c\u8fd9\u91cc\u4e5f\u662f\u548csurfaceview\u4e2d\u7684\u4e0d\u540c\u4e4b\u4e00\uff01<\/p>\n<p><strong>\u5907\u6ce83<\/strong><\/p>\n<p>\u8fd9\u91cccanvas.save();\u548ccanvas.restore();\u662f\u4e24\u4e2a\u76f8\u4e92\u5339\u914d\u51fa\u73b0\u7684\uff0c\u4f5c\u7528\u662f\u7528\u6765\u4fdd\u5b58\u753b\u5e03\u7684\u72b6\u6001\u548c\u53d6\u51fa\u4fdd\u5b58\u7684\u72b6\u6001\u7684\u3002\u8fd9\u91cc\u7a0d\u5fae\u89e3\u91ca\u4e00\u4e0b\uff0c<\/p>\n<p>\u5f53\u6211\u4eec\u5bf9\u753b\u5e03\u8fdb\u884c\u65cb\u8f6c\uff0c\u7f29\u653e\uff0c\u5e73\u79fb\u7b49\u64cd\u4f5c\u7684\u65f6\u5019\u5176\u5b9e\u6211\u4eec\u662f\u60f3\u5bf9\u7279\u5b9a\u7684\u5143\u7d20\u8fdb\u884c\u64cd\u4f5c\uff0c\u6bd4\u5982\u56fe\u7247\uff0c\u4e00\u4e2a\u77e9\u5f62\u7b49\uff0c\u4f46\u662f\u5f53\u4f60\u7528canvas\u7684\u65b9\u6cd5\u6765\u8fdb\u884c\u8fd9\u4e9b\u64cd\u4f5c\u7684\u65f6\u5019\uff0c\u5176\u5b9e\u662f\u5bf9\u6574\u4e2a\u753b\u5e03\u8fdb\u884c\u4e86\u64cd\u4f5c\uff0c\u90a3\u4e48\u4e4b\u540e\u5728\u753b\u5e03\u4e0a\u7684\u5143\u7d20\u90fd\u4f1a\u53d7\u5230\u5f71\u54cd\uff0c\u6240\u4ee5\u6211\u4eec\u5728\u64cd\u4f5c\u4e4b\u524d\u8c03\u7528canvas.save()\u6765\u4fdd\u5b58\u753b\u5e03\u5f53\u524d\u7684\u72b6\u6001\uff0c\u5f53\u64cd\u4f5c\u4e4b\u540e\u53d6\u51fa\u4e4b\u524d\u4fdd\u5b58\u8fc7\u7684\u72b6\u6001\uff0c\u8fd9\u6837\u5c31\u4e0d\u4f1a\u5bf9\u5176\u4ed6\u7684\u5143\u7d20\u8fdb\u884c\u5f71\u54cd<\/p>\n<p>\u3010\u7f16\u8f91\u63a8\u8350\u3011<\/p>\n<p>Android\u8f6f\u4ef6\u6e38\u620f\u6c49\u5316\u6559\u7a0b<\/p>\n<p>\u516b\u6b3e\u5f00\u6e90Android\u6e38\u620f\u5f15\u64ce<\/p>\n<p>\u624b\u673a\u6e38\u620f\u884c\u5bb6\uff1a\u5236\u4f5c\u51faiOS\u7cbe\u54c1\u6e38\u620f\u7684\u5173\u952e\u70b9<\/p>\n<p>\u8d44\u6df1\u6e38\u620f\u8bbe\u8ba1\u5e08\u89e3\u6790\u624b\u673a\u6e38\u620f\u5f00\u53d1\u7684\u56db\u4e2a\u5c42\u6b21<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java\u4ee3\u7801\uff1a package&nbsp;eoe.demo;&nbsp;&nbsp;&nbsp; import [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[195111],"tags":[],"class_list":["post-205240","post","type-post","status-publish","format-standard","hentry","category-android"],"_links":{"self":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts\/205240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/comments?post=205240"}],"version-history":[{"count":0,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/posts\/205240\/revisions"}],"wp:attachment":[{"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/media?parent=205240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/categories?post=205240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/idc.net\/help\/wp-json\/wp\/v2\/tags?post=205240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}