刮刮乐实例教程

loading 2014-09-05 08:33:15
加精
刮奖在生活中常常见到,网上现在也有各种各样的抽奖活动,下面我们就要实现一个刮刮乐程序,可以完美满足 大家的虚荣心,哈哈,下面就开始吧,100%中奖的喔!

下面先来看看效果图:





让我们来看看它的布局:


<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >

<TextView
android:id="@+id/textView1"
android:layout_width="300dp"
android:layout_height="150dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@android:color/holo_red_dark"
android:gravity="center"
android:text="恭喜你,中奖啦!"
android:textSize="35dp" />

<net.androidchina.example.guale.EraseView
android:id="@+id/eraseView1"
android:layout_width="300dp"
android:layout_height="150dp"
android:layout_centerHorizontal="true"
android:layout_centerInParent="true"
android:layout_centerVertical="true" />
</RelativeLayout>

布局很简单,通过相对布局,将文字和view重叠到一起,重点是EraseView这个类的实现,下面一起看看这个类的代码:
首先我们要定义一个画布以及画笔

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(30);

mCanvas = new Canvas(bitmap);
当手指触摸屏幕时,需要触发滑动事件:

@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);
}

这里需要一个path来记录轨迹,并且需要调用invalidate();来对画布进行重画,会进一步调用onDraw方法:

@Override
protected void onDraw(Canvas canvas) {

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


源码下载:点击下载
...全文
3614 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010952493 2016-09-14
  • 打赏
  • 举报
回复
资源很不错,学习了
tjw241314240 2014-09-30
  • 打赏
  • 举报
回复
好东西,谢谢啊 。
Java 狂魔 2014-09-12
  • 打赏
  • 举报
回复
谢谢,很有用
xiazai1239 2014-09-11
  • 打赏
  • 举报
回复
好好好好好好好
Java 狂魔 2014-09-10
  • 打赏
  • 举报
回复
好东西,谢谢
最动听的和弦 2014-09-10
  • 打赏
  • 举报
回复
会飞的Pikachu 2014-09-08
  • 打赏
  • 举报
回复
不错 不错 不错
agan很努力 2014-09-07
  • 打赏
  • 举报
回复
非常好!!!!!!!!!!!!!
jswanghaodz 2014-09-06
  • 打赏
  • 举报
回复
这个不错
qq_20416957 2014-09-06
  • 打赏
  • 举报
回复
哈哈,很不错哦。
iiinvisible 2014-09-06
  • 打赏
  • 举报
回复
楼主好厉害!!!!!!!!!!!!!!!!!!
oliverdon 2014-09-05
  • 打赏
  • 举报
回复
不错啊,Learning……
laoer_2002 2014-09-05
  • 打赏
  • 举报
回复
谢谢楼主分享
  • 打赏
  • 举报
回复
EraseView的实现值得一赞
hugh_z 2014-09-05
  • 打赏
  • 举报
回复
learning
cattpon 2014-09-05
  • 打赏
  • 举报
回复
很不错的实例。。。。
哎,真难 2014-09-05
  • 打赏
  • 举报
回复
虽然自己做过,但是商业用途就不分享了,帮你推荐了,楼主可以思考个问题完善下,刮的区域是不是自己去划开的,,,
卡卡的喵 2014-09-05
  • 打赏
  • 举报
回复
这个不错
line_us 2014-09-05
  • 打赏
  • 举报
回复
100%中奖的喔!
快乐夏天 2014-09-05
  • 打赏
  • 举报
回复
加载更多回复(2)

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧