天天看点

仿刮刮乐刮奖效果 1.效果图 2.代码实现

该功能实现很简单,就是根据手指坐标位置在画板上画

仿刮刮乐刮奖效果 1.效果图 2.代码实现
仿刮刮乐刮奖效果 1.效果图 2.代码实现
仿刮刮乐刮奖效果 1.效果图 2.代码实现

public class erinieshow extends relativelayout {  

    context context;  

    relativelayout bg;  

    myview myview;  

    int level;  

    public erinieshow(context context, int level) {  

        super(context);  

        this.context = context;  

        this.level = level;  

        bg = new relativelayout(context);  

        myview = new myview(context);  

        bg.addview(myview);  

        addview(bg);  

        int[] resolution = phoneutil.getresolution(context);  

        relativelayout.layoutparams params = new relativelayout.layoutparams(  

                resolution[0], phoneutil.getfitheight(context, 125));  

        bg.setid(100001);  

        bg.setlayoutparams(params);  

        myview.setlayoutparams(params);  

        switch (level) {  

        case 0:  

            bg.setbackgroundresource(r.drawable.rewardlevel0);  

            break;  

        case 1:  

            bg.setbackgroundresource(r.drawable.rewardlevel1);  

        case 2:  

            bg.setbackgroundresource(r.drawable.rewardlevel2);  

        default:  

            bg.setbackgroundresource(r.drawable.rewardlevel3);  

        }  

        myview.init(color.parsecolor("#d3d3d3"), 30, 10);  

    }  

}  

仿刮刮乐刮奖效果 1.效果图 2.代码实现

public class myview extends textview {  

    private float touch_tolerance; // 填充距离,使线条更自然,柔和,值越小,越柔和。  

    private bitmap mbitmap;  

    private canvas mcanvas;  

    private paint mpaint;  

    private path mpath;  

    private float mx, my;  

    private boolean isdraw = false;  

    int time=0;  

    public myview(context context) {  

    @override  

    protected void ondraw(canvas canvas) {  

        super.ondraw(canvas);  

        if (isdraw) {  

            mcanvas.drawpath(mpath, mpaint);  

            canvas.drawbitmap(mbitmap, 0, 0, null);  

    /** 

     * 开启檫除功能 

     *  

     * @param bgcolor 

     *            覆盖的背景颜色 

     * @param paintstrokewidth 

     *            触点(橡皮)宽度 

     * @param touchtolerance 

     *            填充距离,值越小,越柔和。 

     */  

    public void init(final int bgcolor, final int paintstrokewidth,  

            float touchtolerance) {  

        touch_tolerance = touchtolerance;  

        // 设置画笔  

        mpaint = new paint();  

        // mpaint.setalpha(0);  

        // 画笔划过的痕迹就变成透明色了  

        mpaint.setcolor(color.black); // 此处不能为透明色  

        mpaint.setxfermode(new porterduffxfermode(porterduff.mode.dst_out));  

        // 或者  

        // mpaint.setxfermode(new porterduffxfermode(porterduff.mode.dst_in));  

        mpaint.setantialias(true);  

        mpaint.setdither(true);  

        mpaint.setstyle(paint.style.stroke);  

        mpaint.setstrokejoin(paint.join.round); // 前圆角  

        mpaint.setstrokecap(paint.cap.round); // 后圆角  

        mpaint.setstrokewidth(paintstrokewidth); // 笔宽  

        // 痕迹  

        mpath = new path();  

        // 覆盖  

        layoutparams layoutparams = getlayoutparams();  

        int height = layoutparams.height;  

        int width;  

        if (getlayoutparams().width == layoutparams.match_parent) {  

            width = 700;  

        } else {  

            width = layoutparams.width;  

        mbitmap = bitmap.createbitmap(width, height, config.argb_8888);  

        mcanvas = new canvas(mbitmap);  

        mcanvas.drawcolor(bgcolor);  

        isdraw = true;  

    public boolean ontouchevent(motionevent event) {  

        if (!isdraw) {  

            return true;  

        switch (event.getaction()) {  

        case motionevent.action_down: // 触点按下  

            // touchdown(event.getrawx(),event.getrawy());  

            touchdown(event.getx(), event.gety());  

            invalidate();  

        case motionevent.action_move: // 触点移动  

            touchmove(event.getx(), event.gety());  

        case motionevent.action_up: // 触点弹起  

            touchup(event.getx(), event.gety());  

        return true;  

    private void touchdown(float x, float y) {  

        mpath.reset();  

        mpath.moveto(x, y);  

        mx = x;  

        my = y;  

    private void touchmove(float x, float y) {  

        float dx = math.abs(x - mx);  

        float dy = math.abs(y - my);  

        if (dx >= touch_tolerance || dy >= touch_tolerance) {  

            mpath.quadto(mx, my, (x + mx) / 2, (y + my) / 2);  

            mx = x;  

            my = y;  

    private void touchup(float x, float y) {  

        mpath.lineto(x, y);  

        mcanvas.drawpath(mpath, mpaint);