Android自定义刮刮乐控件
2016-03-22 15:29
447 查看
Android刮刮乐控件可以利用Xfermode以及PorterDuff来实现,PorterDuff的16种参数效果如下:
![](http://img.blog.csdn.net/20140426213750328?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbG1qNjIzNTY1Nzkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
代码如下:
代码如下:
public class GuaView extends View { private Paint mPaint=new Paint(); private Path mPath = new Path(); private Bitmap bitMapForDraw; private Canvas canvas; private int mLastX; private int mLastY; public GuaView(Context context) { super(context); } public GuaView(Context context, AttributeSet attributeSet) { super(context, attributeSet); } public GuaView(Context context, AttributeSet attributeSet, int defStyle) { super(context, attributeSet, defStyle); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width=getMeasuredWidth(); int height=getMeasuredHeight(); bitMapForDraw=Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); canvas=new Canvas(bitMapForDraw); mPaint.setAntiAlias(true); mPaint.setColor(Color.DKGRAY); mPaint.setDither(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.ROUND); mPaint.setStrokeWidth(20); canvas.drawARGB(255, 56, 105, 199); } @Override protected void onDraw(Canvas canvas) { String text="谢谢参与"; float textSize=60.0f; Paint p=new Paint(); p.setAntiAlias(true); p.setDither(true); p.setColor(Color.CYAN); p.setTextSize(textSize); p.setStyle(Paint.Style.STROKE); float len = p.measureText(text); float xPos=(getMeasuredWidth()-len)/2; float yPos=getMeasuredHeight()/2; canvas.drawText(text, xPos, yPos, p); renderToBitmap(); canvas.drawBitmap(bitMapForDraw, 0, 0, null); } private void renderToBitmap() { mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)); canvas.drawPath(mPath, mPaint); } @Override public boolean onTouchEvent(MotionEvent event) { int x=(int)event.getX(); int y=(int)event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: { mLastX=x; mLastY=y; mPath.moveTo(x, y); break; } case MotionEvent.ACTION_MOVE: { mPath.lineTo(x, y); break; } default: break; } invalidate(); return true; } }
相关文章推荐
- Android 百度地图 SDK v3.0.0
- 【Android进阶】如何给gridview的单元格加上分割线
- Android中的Handler的post方法
- android数据持久化存储(1)
- Android-->Rxjava与Retrofit2的结合实战
- Android 之 ExpandableListView 的使用
- 详解Android中的Context抽象类
- 【Android inflate 参数 完全诠释】
- Android中MVC、MVP、MVVM详解
- Android 状态栏、标题栏、屏幕高度、全屏
- [android|ViewPager]关于ViewPager如何阻止其滑动和一次切换多页闪烁的问题
- Android之字符串的拆分-split
- Android Studio的使用——引入库如:引入PullToRefresh的library
- (转)Android Volley完全解析(一),初识Volley的基本用法
- Android 简单实现ListView顶部悬浮效果
- Android数据库ORM框架用法、源码和性能比较分析
- Android_Class_Activity
- android Animation 动画
- Android数据库greenDAO框架用法和源码分析
- Android设置textview的字体之间的间距