3

我正在 Android 上做一个小型刮刮卡游戏。我在屏幕中央放置了一个 ImageView,并在其顶部放置了一个自定义视图。我用特定颜色填充自定义视图(比如绿色,因此不显示 ImageView),然后当用户在屏幕上移动手指时,我想从自定义视图中清除颜色,以便从下方显示 ImageView。我看到了这个帖子:两层,但无法在 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 的像素在手指移动的地方变得透明,但这不会发生。任何帮助将不胜感激。

4

1 回答 1

0

我遇到了这个有 2 层的项目,当你刮擦顶层时,底层就会显露出来。创作者还提供免费许可证!

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

于 2013-10-02T19:40:26.973 回答