電商刮刮卡開發基礎準備,電商刮刮卡基礎

來源:互聯網
上載者:User

電商刮刮卡開發基礎準備,電商刮刮卡基礎

  在我們的生活和學習中一定遇到過很多類似的效果,比如當我們購物時,商家為了促銷,有時會採用刮獎的方式來求得大家的關注,隨著移動互連網的高速發展,越來越多的電商走進了我們的視線,那麼傳統的刮刮卡效果如何在手機上實現呢?本篇我將為大家介紹一下這個實現的方式和方案。

  對於這個效果的實現需要用到繪圖的知識,大家如果對這部分知識存在困難,建議大家首先去準備一下這方面的知識,這樣可以更好的方便你對本效果的認識。ok,開始我們本篇的內容介紹:

  對於刮刮卡效果的實現,我們需要使用paint.setXfermode()來控制我們的圖層顯示,對於setXfermode()的16中效果,請結合進行掌握。

  

  在進行具體操作之前先為大家介紹一下關於圓角圖片的設計方式:1、我們繪製我們的矩形(正方形)圖片;2、setXferMode(srcIn);;3、繪製我們的圓形。三步就可以完成我們的效果了。我們的刮刮卡效果就是這個原理,下面我們一起來學習一下吧。

  第一步我們先實現一個畫板的效果,為我們接下來的設計打一下基礎,這裡我們在布局檔案中需要使用自訂View,所以我們的自訂View代碼:

public class guagua extends View{    //定義變數    private Paint mOutterPath;//畫筆對象    private Path mPath;//記錄使用者手指的繪製過程    private Canvas mCanvas;//畫布    private Bitmap mBitmap;//圖片        //記錄使用者繪製時的座標值    private int mLastX = 0;    private int mLastY = 0;         public guagua(Context context) {        this(context, null);    }        public guagua(Context context, AttributeSet attrs) {        this(context, null, 0);    }        public guagua(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        //初始設定變數        init();    }        /**     * 進行初始化操作     */    private void init() {        mOutterPath = new Paint();//畫筆對象        mPath = new Path();//繪製過程    }    /**     * 得到控制項的寬和高     */    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        int width = getMeasuredWidth();        int height = getMeasuredHeight();        //初始化我們的Bitmap(畫布)對象        mBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);        mCanvas = new Canvas(mBitmap);                //初始化我們的畫筆屬性        this.myOutterPath();    }        /**     * 初始化我們的畫筆屬性     */    protected void myOutterPath() {        mOutterPath.setColor(Color.BLUE);//設定畫筆的顏色        mOutterPath.setAntiAlias(true);//設定鋸齒        mOutterPath.setDither(true);        mOutterPath.setStrokeJoin(Paint.Join.ROUND);//圓角        mOutterPath.setStrokeCap(Paint.Cap.ROUND);        mOutterPath.setStyle(Style.STROKE);        mOutterPath.setStrokeWidth(10);//線條的寬頻            }        /**     * 使用者操作事件的監控     */    @Override    public boolean onTouchEvent(MotionEvent event) {        int action = event.getAction();        int x = (int) event.getX();        int y = (int) event.getY();        switch (action) {        case MotionEvent.ACTION_DOWN://按下事件            mLastX = x;            mLastY = y;            mPath.moveTo(mLastX, mLastY);            break;        case MotionEvent.ACTION_MOVE://離開事件            //判斷使用者繪製的是否達到一定的值            int dx = Math.abs(x - mLastX);            int dy = Math.abs(y - mLastY);            if(dx>3||dy>3){                mPath.lineTo(x, y);            }            mLastX = x;            mLastY = y;            break;        case MotionEvent.ACTION_UP://抬起事件                        break;        default:            break;        }        invalidate();        return true;    }        @Override    protected void onDraw(Canvas canvas) {        drawPath();        canvas.drawBitmap(mBitmap, 0, 0, null);    }    private void drawPath() {        mCanvas.drawPath(mPath, mOutterPath);    }    }

  第二步我們需要在Layout檔案中進行引用:

<cn.edu.hpu.guaguaka.guagua        android:layout_below="@id/text"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        />

  到這裡我們的畫板效果就實現的了,下面我們來進一步改進我們的自訂View來向我們的最終效果靠近,接下來我們實現一個類似於之前很火的小遊戲:脫美女的效果。我們需要準備一張圖片作為我們的美女。代碼如下:

public class guagua extends View{    //定義變數    private Paint mOutterPath;//畫筆對象    private Path mPath;//記錄使用者手指的繪製過程    private Canvas mCanvas;//畫布    private Bitmap mBitmap;//圖片        //記錄使用者繪製時的座標值    private int mLastX = 0;    private int mLastY = 0;        //-----------------------------------    private Bitmap bitmap;         public guagua(Context context) {        this(context, null);    }        public guagua(Context context, AttributeSet attrs) {        this(context, null, 0);    }        public guagua(Context context, AttributeSet attrs, int defStyleAttr) {        super(context, attrs, defStyleAttr);        //初始設定變數        init();    }        /**     * 進行初始化操作     */    private void init() {        mOutterPath = new Paint();        mPath = new Path();         //載入底層圖片        bitmap = BitmapFactory.decodeResource(getResources(), com.example.guaguaka.R.drawable.girl);    }    /**     * 得到控制項的寬和高     */    @Override    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {        super.onMeasure(widthMeasureSpec, heightMeasureSpec);        int width = getMeasuredWidth();        int height = getMeasuredHeight();        //初始化我們的Bitmap(畫布)對象        mBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);        mCanvas = new Canvas(mBitmap);                //初始化我們的畫筆屬性        this.myOutterPath();                //設定覆蓋色        mCanvas.drawColor(Color.parseColor("#C0C0C0"));        //mCanvas.drawColor(Color.BLACK);            }        /**     * 初始化我們的畫筆屬性     */    protected void myOutterPath() {        mOutterPath.setColor(Color.RED);//設定畫筆的顏色        mOutterPath.setAntiAlias(true);//設定鋸齒        mOutterPath.setDither(true);        mOutterPath.setStrokeJoin(Paint.Join.ROUND);//圓角        mOutterPath.setStrokeCap(Paint.Cap.ROUND);        mOutterPath.setStyle(Style.STROKE);        mOutterPath.setStrokeWidth(20);//線條的寬頻            }        /**     * 使用者操作事件的監控     */    @Override    public boolean onTouchEvent(MotionEvent event) {        int action = event.getAction();        int x = (int) event.getX();        int y = (int) event.getY();        switch (action) {        case MotionEvent.ACTION_DOWN://按下事件            mLastX = x;            mLastY = y;            mPath.moveTo(mLastX, mLastY);            break;        case MotionEvent.ACTION_MOVE://離開事件            //判斷使用者繪製的是否達到一定的值            int dx = Math.abs(x - mLastX);            int dy = Math.abs(y - mLastY);            if(dx>3||dy>3){                mPath.lineTo(x, y);            }            mLastX = x;            mLastY = y;            break;        case MotionEvent.ACTION_UP://抬起事件                        break;        default:            break;        }        invalidate();        return true;    }        @Override    protected void onDraw(Canvas canvas) {        canvas.drawBitmap(bitmap, 0, 0, null);        drawPath();        canvas.drawBitmap(mBitmap, 0, 0, null);    }    private void drawPath() {        mOutterPath.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_OUT));        mCanvas.drawPath(mPath, mOutterPath);    }    }

  需要修改的地方已經為大家進行標註,很清晰,相信大家都可以理解。對於刮刮卡的具體實現,我將在隨後的介紹中帶領大家一點一點的實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.