Android中實現雙緩衝(畫板應用)和XML檔案定義菜單

來源:互聯網
上載者:User

1.什麼是雙緩衝技術?雙緩衝技術就是當使用者操作介面完成後,會有一個緩衝區儲存使用者操作的結果。 為什麼要使用雙緩衝技術?拿Android 遊戲開發來說,介面貞每次都是全部重畫的,也就說畫了新的,舊的就沒了,所以需要使用雙緩衝技術儲存之前的內容。 如何?雙緩衝?使用一個Bitmap對象保留之前的畫布即可。 查看源碼列印?01package com.example.phonegaptest;02 03import android.content.Context;04import android.graphics.Bitmap;05import android.graphics.Bitmap.Config;06import android.graphics.Canvas;07import android.graphics.Color;08import android.graphics.Paint;09import android.graphics.Path;10import android.util.AttributeSet;11import android.view.MotionEvent;12import android.view.View;13 14public class DrawView extends View {15    float preX;16    float preY;17    private Path path;18    public Paint paint = null;19    final int VIEW_WIDTH = 320;20    final int VIEW_HEIGHT = 480;21    Bitmap cacheBitmap = null;//定義一個記憶體中的圖片,這張圖片會作為緩衝區22    Canvas cacheCanvas = null;//定義cacheBitmap上的畫布cacheCanvas23 24    public DrawView(Context context, AttributeSet set) {25        super(context, set);26        cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH, VIEW_HEIGHT,27                Config.ARGB_8888);//建立緩衝區28        cacheCanvas = new Canvas();29 30        path = new Path();31        cacheCanvas.setBitmap(cacheBitmap);32 33        paint = new Paint(Paint.DITHER_FLAG);34        paint.setColor(Color.RED);35        paint.setStyle(Paint.Style.STROKE);36        paint.setStrokeWidth(1);37        paint.setAntiAlias(true);38        paint.setDither(true);39    }40 41    @Override42    public boolean onTouchEvent(MotionEvent event) {43        float x = event.getX();44        float y = event.getY();45 46        switch (event.getAction()) {47        case MotionEvent.ACTION_DOWN:48            path.moveTo(x, y);49            preX = x;50            preY = y;51            break;52        case MotionEvent.ACTION_MOVE:53            path.quadTo(preX, preY, x, y);54            preX = x;55            preY = y;56            break;57        case MotionEvent.ACTION_UP:58            cacheCanvas.drawPath(path, paint);59            path.reset();60            break;61        }62        invalidate();63        return true;//返回true表明處理方法已經處理該事件,該事件不會擴散64    }65 66    @Override67    protected void onDraw(Canvas canvas) {68        super.onDraw(canvas);69        Paint bmpPaint = new Paint();70        canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);71        canvas.drawPath(path, paint);72    }73 74}     2.XMl檔案實現菜單功能 XMl檔案如下:[html] view plaincopy<?xml version="1.0" encoding="utf-8"?>    <menu xmlns:android="http://schemas.android.com/apk/res/android" >        <item            android:id="@+id/close"            android:icon="@drawable/ic_launcher"            android:orderInCategory="3"            android:title="Close"/>        <item            android:id="@+id/no_icon"            android:orderInCategory="2"            android:title="Sans Icon"/>        <item            android:id="@+id/disabled"            android:enabled="true"            android:orderInCategory="4"            android:title="Disabled"/>        <!-- orderInCategory表示的是item的排序-->        <group            android:id="@+id/other_stuff"            android:menuCategory="secondary"            android:visible="true" >            <item                android:id="@+id/later"                android:orderInCategory="0"                android:title="2nd-To-Last"/>            <item                android:id="@+id/last"                android:orderInCategory="1"                android:title="Last"/>        </group>        <!--表示的是二級菜單-->        <item            android:id="@+id/submenu"            android:orderInCategory="3"            android:title="A Submenu">            <menu>                <item                    android:id="@+id/non_ghost"                    android:alphabeticShortcut="n"                    android:title="Non-Ghost"                    android:visible="true"/>                <item                    android:id="@+id/ghost"                    android:alphabeticShortcut="g"                    android:title="A Ghost"                    android:visible="true"/>            </menu>        </item>        </menu>     主檔案[java] view plaincopypackage com.example.receiveractivity;    import android.app.Activity;  import android.os.Bundle;  import android.util.Log;  import android.view.Menu;  import android.view.MenuInflater;  import android.view.MenuItem;         public class ReceiverActivity extends Activity {        /** Called when the activity is first created. */        private static final String TAG="BruceZhang";            @Override        public void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_receiver);            }            @Override        public boolean onCreateOptionsMenu(Menu menu) {            // TODO Auto-generated method stub            MenuInflater mflater=new MenuInflater(this);            mflater.inflate(R.menu.activity_receiver, menu);            return super.onCreateOptionsMenu(menu);        }            @Override        public boolean onOptionsItemSelected(MenuItem item) {            // TODO Auto-generated method stub            switch(item.getItemId()){            case R.id.close:                Log.v(TAG, "------------close");                break;            case R.id.no_icon:                Log.v(TAG, "------------noicon");                break;            case R.id.submenu:                Log.v(TAG, "------------submenu");                break;            case R.id.non_ghost:                Log.v(TAG, "------------non_ghost");                break;            case R.id.ghost:                Log.v(TAG, "------------ghost");                break;            case R.id.disabled:                Log.v(TAG, "------------disabled");                break;            case R.id.last:                Log.v(TAG, "------------last");                break;    www.2cto.com        case R.id.later:                Log.v(TAG, "------------laster");                break;            default:                break;            }            return super.onOptionsItemSelected(item);        }                                }      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.