android刮刮奖效果

自定义View盖在textView上

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class EraseView extends View {

private boolean isMove = false;
private Bitmap bitmap = null;
private Bitmap frontBitmap = null;
private Path path;
private Canvas mCanvas;
private Paint paint;


public EraseView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onDraw(Canvas canvas) {

if (mCanvas == null) {
EraseBitmp();
}
canvas.drawBitmap(bitmap, 0, 0, null);
mCanvas.drawPath(path,paint);
super.onDraw(canvas);
}

public void EraseBitmp() {

bitmap = Bitmap.createBitmap(getWidth(),getHeight(), Bitmap.Config.ARGB_4444);

frontBitmap = CreateBitmap(Color.GRAY,getWidth(),getHeight());

paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR));
paint.setAntiAlias(true);
paint.setDither(true);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStrokeWidth(20);

path = new Path();

mCanvas = new Canvas(bitmap);
mCanvas.drawBitmap(frontBitmap, 0, 0,null);
}

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

if (event.getAction() == MotionEvent.ACTION_DOWN) {
isMove = false;
path.reset();
path.moveTo(ax, ay);
invalidate();
return true;
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
isMove = true;
path.lineTo(ax,ay);
invalidate();
return true;
}
return super.onTouchEvent(event);
}

public Bitmap CreateBitmap(int color,int width, int height) {
int[] rgb = new int [width * height];

for (int i=0;i<rgb.length;i++) {
rgb[i] = color;
}

return Bitmap.createBitmap(rgb, width, height,Config.ARGB_8888);
}

}

布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="100dp" >

<TextView
android:id="@+id/tv_main_msg"
android:layout_width="300dp"
android:layout_height="150dp"
android:background="@android:color/holo_red_dark"
android:gravity="center_vertical|center_horizontal"
android:text="你没中奖"
android:textSize="40sp" />

<com.example.guale.EraseView
android:id="@+id/eraseView1"
android:layout_width="300dp"
android:layout_height="150dp" />
</RelativeLayout>

</LinearLayout>

更多相关文章

  1. 35、键盘布局的tableLayout备份
  2. Android 图片倒影效果源码
  3. 相对布局RelativeLayout
  4. android布局ui
  5. Mac与Android文件传输工具 Android File Transfer

随机推荐

  1. 安卓自定义属性,Android(安卓)studio无法
  2. 界面有Edittext时有些手机进入界面会自动
  3. android之ListView的item布局问题总结
  4. android工程导出成为jar包。
  5. Android实现ListView异步加载图片
  6. Java,Android Integer和byte的相互转换,Jav
  7. 用ndk-build 工具手动生成编译android原
  8. Android 自定义View(API解析+Demo)
  9. 图片中的毕加索【Picasso】
  10. Android 新手常见的10个误区(下)