Android刮彩票效果

来源:互联网 发布:同性电影推荐知乎 编辑:程序博客网 时间:2024/04/27 02:25

这里写图片描述

实现分析:
1.底部一张图片
2.图片头部是一个矩形遮挡图片
3.通过滑动监听,让矩形缺失,露出底部图片

这里写图片描述
主要代码如下:

    private RectF rectf;    private Bitmap bitmap = BitmapFactory.decodeResource(getResources(),            R.drawable.test);    //头部    private Canvas headCanvas;    private int width;    private int height;    // 开始绘制Path坐标    private float startX;    private float startY;    // 用来绘制划过的路径    private Path path = new Path();    // 划过多大距离开始绘制划过的路径    private static final int DIS = 20;    // 画笔    private Paint paint;    // 画笔size    private int paintSize = 20;    @Override    protected void onDraw(Canvas canvas) {        // TODO Auto-generated method stub        width = getWidth();        height = getHeight();        paintSize = height / 5;        rectf = new RectF(0, 0, width, height);        // 底部的文字        canvas.drawBitmap(bitmap, null, rectf, null);        // 挡住底部文字        canvas.drawBitmap(drawHead(), null, rectf, null);    }    // 头部的图层    private Bitmap drawHead() {        Bitmap bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);        headCanvas = new Canvas(bitmap);        RectF rectF = new RectF(0, 0, width, height);        paint = new Paint();        paint.setColor(Color.BLACK);        // 画一个矩阵挡住底部        headCanvas.drawRect(rectF, paint);        /*         * 设置图层混合模式 Mode.SRC_OUT:在不相交的地方绘制 源图像         */        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_OUT));        paint.setAlpha(0);        paint.setAntiAlias(true);        paint.setStrokeWidth(paintSize);        /*         * 设置画笔的形状         */        paint.setStyle(Paint.Style.STROKE);        // 前圆角        paint.setStrokeJoin(Paint.Join.ROUND);        // 后圆角        paint.setStrokeCap(Paint.Cap.ROUND);        // 绘制滑动路径        headCanvas.drawPath(path, paint);        return bitmap;    }    // 刷新    public void setRefresh() {        // 清除路径        path.rewind();        invalidate();    }    // 切换图片    public void setImage(Bitmap bitmap) {        path.rewind();        this.bitmap = bitmap;        invalidate();    }    @Override    public boolean dispatchTouchEvent(MotionEvent event) {        // TODO Auto-generated method stub        switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:            startX = event.getX();            startY = event.getY();            // 移动起点            path.moveTo(startX, startY);            invalidate();            break;        case MotionEvent.ACTION_MOVE:            float differenceX = Math.abs(event.getX() - startX);            float differenceY = Math.abs(event.getY() - startY);            if (differenceX >= DIS || differenceY >= DIS) {                /*                 * 参数1,2:为控制点 参数3,4:为结束点                 */                path.quadTo(startX, startY, event.getX(), event.getY());                startX = event.getX();                startY = event.getY();            }            invalidate();            break;        case MotionEvent.ACTION_UP:            break;        default:            break;        }        return true;    }

源码下载

0 0
原创粉丝点击