美文网首页
蒙层绘制

蒙层绘制

作者: 丶奏 | 来源:发表于2017-11-17 16:49 被阅读0次

基本思路:将一个矩形填满画布并涂上半透明的颜色,然后通过设置PorterDuffXfermode来挖出一块空洞

定义值

private int mViewLY,mViewLX;//展示View位置

private int mViewHeight,mViewWidth,mViewMax;// 展示 View的宽高以及其中最大值

private Paint mPaintTranslucent;//画笔 背景

private Paint  mPaintLucent;//画笔 高亮区

Print 常用属性

mPaint.setColor(int);//设置颜色值

mPaint.setAlpha(int);//设置透明度

mPaint.setStyle(Paint.Style);//设置样式 FILL,FILL_OR_STROKE,或STROKE

mPaint.setStrokeWidth(int);//设置画笔宽度

mPaint.setXfermode(Xfermode);//设置图像重叠时的处理方式

mPaint.setAntiAlias(boolean)://设置是否抗锯齿

mPaint. setTextSize(float);//设置文字大小

Canvans 常用属性

mCanvas.drawRect(RectF, Paint);//矩形

mCanvas.drawPath(Path, Paint);//路径

mCanvas.drawArc(RectF,float 起始角度 ,float 跨越角度,boolean 是否闭合, Paint);//画弧

mCanvas .drawCircle(float X, float Y , float radius,Paint)

onMeasure中 获取整个视图大小

    mViewWidth = MeasureSpec.getSize(widthMeasureSpec);

    mViewHeight = MeasureSpec.getSize(heightMeasureSpec);

获取需高亮展示View大小以及位置 

//获得 需高亮展示View大小

mView.measure(0,0);

mViewHeight = mView.getMeasuredHeight();

mViewWidth = mView.getMeasuredWidth();

//宽高中最大值

if(mViewHeight>mViewWidth){

    mViewMax = mViewHeight;

} else{

    mViewMax = mViewWidth;

}

if(mViewLX == 0){

    //获得位置

    int[] locationTwo = new int[2];

    mView.getLocationOnScreen(locationTwo);

    mViewLX = locationTwo[0];

    mViewLY = locationTwo[1];

}

获得状态栏高度  沉浸式状态栏时不需要

private int getStatusBarHeight() {

    int statusBarHeight = -1;

    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");

    if (resourceId > 0) { statusBarHeight = getResources().getDimensionPixelSize(resourceId); }

    return statusBarHeight;

}

获取整个视图大小 并根据其新建一块画布

Canvas bitmapCanvas = new Canvas(Bitmap.createBitmap(mViewWidth, mViewHeight, Bitmap.Config.ARGB_8888));

通过坐标 计算圆心坐标以及半径 

int mCircleX = mViewLX + (mViewWidth/2);//X坐标

int mCircleY = isBarH?mViewLY+(mViewHeight/2)-(mTop+getStatusBarHeight()):mViewLY+(mViewHeight/2)-mTop;//Y坐标

float mRadius = 1.05f;//半径扩充  使圆比View稍大一些

int mR = (int)(mViewMax/2 * mRadius);//半径

画展示区域  设置PorterDuffXfermode为PorterDuff.Mode.SRC_OUT模式

//给画笔设置 PorterDuffXfermode

PorterDuffXfermode mode = new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT);

mPaintLucent.setXfermode(mode);

//画背景以及展示区

bitmapCanvas.drawRect(0, 0, mThisViewWidth, mThisViewHeight, mPaintTranslucent);

bitmapCanvas.drawPath(path, mPaintLucent);

本人Android小白一枚,如有错误,请指正

相关文章

  • 蒙层绘制

    基本思路:将一个矩形填满画布并涂上半透明的颜色,然后通过设置PorterDuffXfermode来挖出一块空洞 定...

  • Android笔记

    1,绘制bitmap系列操作,阴影,蒙层等 1.c++api网址 http://www.cplusplus.com...

  • Canvas Xfermode 绘制引导页蒙层

    首先看下我们需要实现的效果: 我们需要制造半透明的灰色蒙层,以及全透明的圆圈来着重显示功能点。当然在图层上的vie...

  • swift 自定义蒙层相机

    直接上效果 自定义相机这个就没得说了集成的AVFoundation 百度都有 直接说蒙层吧//绘制遮罩层 关键点创...

  • vue项目 蒙层上有部分滚动,禁止蒙层下的滚动

    思考过程### 开始的思路只解决禁止蒙层下滚动的问题 当点击弹出蒙层时加入: 当点击隐藏蒙层时: 后来发现: 蒙层...

  • PS系统页面水印解决方案

    目的 实现PS系统页面水印的需求,提升系统的信息保密性。 实现原理 通过canvas绘制水印,将水印作为蒙层覆盖页...

  • iOS 渐变色绘制

    1、layer 层绘制 2、贝塞尔绘制曲线 3、

  • Android小知识-了解下Android系统的显示原理

    在Android系统中应用层负责绘制,系统层负责渲染,通过进程间通信把应用层需要绘制的数据传递到系统层,系统层服务...

  • 1.点击穿透问题:

    1.点击穿透问题:点击蒙层(mask)上的关闭按钮,蒙层消失后发现触发了按钮下面元素的click事件。蒙层的关闭按...

  • dialog点击取消后蒙层不消失问题

    问题描述:image.png 初步判断:蒙层是上一个页面A的蒙层,页面B中的蒙层并未出现,查看element代码发...

网友评论

      本文标题:蒙层绘制

      本文链接:https://www.haomeiwen.com/subject/fvqlvxtx.html