android 实现蒙版引导
来源:互联网 发布:什么社交软件好 编辑:程序博客网 时间:2024/05/01 10:18
实现效果如下图
实现方法:
1.计算镂空区域的坐标
2.新建一张canvas,绘制半透明蒙版
3.将PorterDuffXfermode设为Clear
4.绘制镂空区域到canvas
具体见代码:
设置要镂空的view:
public void setTarget(View v) { mTragetView = v; }
计算镂空区域的坐标:
int[] location = new int[2]; mTragetView.getLocationInWindow(location); mRectStartPoints = new Point(location[0], location[1]); rectWidth = mTragetView.getWidth(); rectHeight = mTragetView.getHeight();
绘制蒙版:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (mBitmap == null) { mBitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_4444); mTempCanvas = new Canvas(mBitmap); } mPaint.setColor(Color.parseColor("#000000")); mPaint.setAlpha(188); mTempCanvas.drawRect(0, 0, mTempCanvas.getWidth(), mTempCanvas.getHeight(), mPaint); mTransparentPaint.setColor(getResources().getColor(android.R.color.transparent)); mTransparentPaint.setXfermode(mPorterDuffXfermode); mTempCanvas.drawRect(mRectStartPoints.x , mRectStartPoints.y , mRectStartPoints.x + rectWidth , mRectStartPoints.y + rectHeight, mTransparentPaint); canvas.drawBitmap(mBitmap , 0 , 0 , mPaint); }
禁用镂空区域以外的touch事件:
@Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); //禁用镂空区域以外的触摸事件,如果触摸事件在镂空区域内,执行回调 if ((x > mRectStartPoints.x && x < mRectStartPoints.x + rectWidth) && (y > mRectStartPoints.y && y < mRectStartPoints.y + rectHeight) && event.getAction() == MotionEvent.ACTION_UP) { setVisibility(View.GONE); ((ViewGroup) ((Activity) getContext()).getWindow().getDecorView()).removeView(ShowTipsView.this); if (mListener != null) { mListener.onTouch(); } } return super.onTouchEvent(event); }
源码地址:github地址
0 0
- android 实现蒙版引导
- Android 新手引导蒙层效果实现
- android 引导界面的实现
- android 引导界面的实现 .
- Android引导界面的实现 .
- Android ViewPager实现引导页
- Android实现用户引导界面
- Android实现用户引导界面
- android引导页的实现
- android app引导界面实现
- android实现首次启动引导
- android引导页viewpager实现
- Android 引导页的实现
- Android 简单引导页实现
- Android ViewPager实现引导页
- Android 简单引导页实现
- Android 简单引导页实现
- Android-ViewPage实现一次引导
- SVM用于手写数字识别
- Linux—简介
- 容斥原理
- c++设计模式之简单工厂模式
- C#中调用DLL时未能加载文件或程序集错误处理方法
- android 实现蒙版引导
- 类的加载
- 实习第一天
- spark1.6.2 on hadoop2.6.4安装流程
- ARM Linux启动流程-根文件系统的加载
- 人民日报四问产权保护
- mysql笔记系列——数据类型问题
- 南阳oj 笨小熊
- 三级管知识