使用分层方法进行刮刮卡游戏

时间:2012-12-07 07:21:26

标签: android android-canvas android-custom-view

我在Android上做一个小刮刮卡游戏。我有一个放置在屏幕中央的ImageView,并在其上面有一个自定义视图。我使用特定颜色填充自定义视图(例如绿色,因此未显示ImageView),然后当用户在屏幕上移动手指时,我想从自定义视图中清除颜色,以便从下方显示ImageView。我看到了这个帖子:Two layers, but can't show the bottom layer in android,但坚持他如何创建可擦除的位图,这个位图的颜料和路径的颜料。 这是我的xml布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/img_background"
        android:contentDescription="@string/app_name"/>
    <com.example.scratchcard.TouchEventView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />
</RelativeLayout>

这是我正在使用的TouchEventView代码:

public class TouchEventView extends View {
    private Paint paint = new Paint();
    private Path path = new Path();

    public TouchEventView(Context context, AttributeSet attrs) {
        super(context, attrs);

        paint.setColor(Color.TRANSPARENT);
        paint.setAntiAlias(true);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeJoin(Paint.Join.ROUND);
        paint.setStrokeCap(Paint.Cap.ROUND);
        paint.setStrokeWidth(10f);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawColor(Color.GREEN);
        canvas.drawPath(path, paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float eventX = event.getX();
        float eventY = event.getY();

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            path.moveTo(eventX, eventY);
            return true;
        case MotionEvent.ACTION_MOVE:
            path.lineTo(eventX, eventY);
            break;
        case MotionEvent.ACTION_UP:
            // nothing to do 
                break;
        default:
            return false;
        }

        // Schedules a repaint.
        invalidate();
        return true;
    }
}

我希望TouchEventView的像素在手指移动的地方变得透明但不会发生。任何帮助将受到高度赞赏。

1 个答案:

答案 0 :(得分:0)

我遇到了这个有两层的项目,当你抓住顶层时,底层会被揭示出来。此外,创作者还提供免费许可证!

https://github.com/winsontan520/Android-WScratchView