当前位置: 首页 > news >正文

诸暨市住房和城乡建设局网站wordpress取缩略图

诸暨市住房和城乡建设局网站,wordpress取缩略图,公众号购买网站,全免费建立自己的网站文章目录 前提基础刮刮乐效果总结总结 Android 中 canvas 能画出来的东西鸿蒙的 canvas 还画不了,不大可能吧?有个朋友问鸿蒙应用中想实现刮刮乐效果,应该咋画?这个问题,你能在 Android 上用 canvas 画出来&#xff0c…

文章目录

    • 前提
    • 基础
    • 刮刮乐效果
    • 总结
    • 总结

Android 中 canvas 能画出来的东西鸿蒙的 canvas 还画不了,不大可能吧?有个朋友问鸿蒙应用中想实现刮刮乐效果,应该咋画?这个问题,你能在 Android 上用 canvas 画出来,在鸿蒙里面用 canvas 画不出来?还是 api 不熟悉吧?

前提

这个就比较简单了。你先这样这样,然后再那样那样就行了。
好吧, 正式点,和Android没什么区别:
底层放一张图片或者其他什么控件都行。上面叠一层灰色canvas,手指滑动时记录一下路径,将路径上的颜色去除就行了。和手写签名唯一的区别:签名是按路径添加,刮刮乐是按路径移除。
会了的就不用往下看了,太长不想看的直接拖到最后看源码

基础

Android中的PorterDuff.Mode类似,在鸿蒙中也提供了11种不同的画布复合模式:

  1. source-over: (Default) Draws a new drawing on top of an existing canvas context. 在现有的画布上方绘制新的图形。也是默认行为。
  2. source-in: The new drawing is drawn only where the new drawing overlaps the target canvas.Everything else is transparent.新的图形只在与目标画布重叠的区域绘制,其他区域为透明。
  3. source-out: Draws a new drawing where it does not overlap with the existing canvas content. 在不与现有画布内容重叠的区域绘制新的图形。
  4. source-atop: The new drawing is drawn only where it overlaps the content of the existing canvas. 新的图形只在与现有画布内容重叠的区域绘制。
  5. destination-over: Draws a new graphic behind the existing canvas content. 在现有画布内容后面绘制新的图形。
  6. destination-in: Existing canvas content remains where the new drawing overlaps the existing canvas content.Everything else is transparent.仅在新的图形与现有画布内容重叠的区域保留现有画布内容,其他区域为透明。
  7. destination-out: Existing content remains where the new drawing does not overlap. 仅在新的图形不与现有画布内容重叠的区域保留现有内容。
  8. destination-atop: The existing canvas retains only the part that overlaps with the new drawing,which is drawn behind the canvas content. 现有画布仅保留与新的图形重叠的部分,并位于画布内容后面绘制。
  9. lighter: The color of two overlapping shapes is determined by adding the color values. 两个重叠形状的颜色通过相加颜色值来确定。
  10. copy: Only new graphics are displayed. 仅显示新的图形。
  11. xor: In the image, those overlaps and other places outside of the normal drawing are transparent. 在图像中,重叠部分和正常绘制范围之外的其他区域为透明。

看简介也可能是一脸懵,我们直接上代码看效果。先画一个红色的圆,之后设置globalCompositeOperation为不同的值,再画一个蓝色的正方形,直接看效果。
具体点将,就是红色圆形半径为画布的四分之一,圆心也在画布的四分之一处。蓝色正方形边长是圆形直径,左上角与圆心重合。

@Component
struct CompositeOperationView{@Prop compositeOperation:stringprivate settings: RenderingContextSettings = new RenderingContextSettings(true)private canvasRendering: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)build() {Canvas(this.canvasRendering).width("100%").height("100%").onReady(() => {//获取画布宽高let canvasWidth = this.canvasRendering.widthlet canvasHeight = this.canvasRendering.height//计算圆心let circleX = canvasWidth/4let circleY = canvasHeight/4;let circleCenter = Math.min(circleX,circleY)//画红色圆形this.canvasRendering.fillStyle = "#FF0000"this.canvasRendering.arc(circleCenter,circleCenter,circleCenter,0,Math.PI * 2, false)this.canvasRendering.fill()//设置画布复合操作方式this.canvasRendering.globalCompositeOperation = this.compositeOperation//画蓝色正方形this.canvasRendering.fillStyle = "#0000FF"this.canvasRendering.fillRect(circleCenter, circleCenter, circleCenter*2, circleCenter*2)})}
}export{CompositeOperationView}

这里一共有11种复合操作方式,为了方便对比,我们把这11种方式都画在同一个屏幕上。
因此,在CompositeOperationView中,我们将compositeOperation使用@Prop修饰,由父级控件传进来。

@Entry
@Component
struct CanvasCompositeOperationPage{compositeOperation:string[]=["source-over","source-in","source-out","source-atop","destination-over","destination-in","destination-out","destination-atop","lighter","copy","xor"]build() {Flex({ direction: FlexDirection.Row, wrap: FlexWrap.Wrap, }){ForEach(this.compositeOperation,(item:string)=>{Column(){Text(item)CompositeOperationView({compositeOperation:item}).width("100%").height("80%")}.width("30%").height("20%")})}}
}

这里我们用ForEach循环来进行绘制,这里就不在过多介绍,不清楚的可以去看鸿蒙开发文档中的指南。
我们最终得到这样的一张图
在这里插入图片描述

这就一目了然了,我们可以选用destination-out来实现刮刮乐效果

刮刮乐效果

就和文章开始说的一样,先放一张图,然后canvas绘制蒙层,画布复合操作模式为destination-out,记录手指移动路径,绘制到canvas上,结束。
详细一点就是:

  1. 外层Stack层叠布局,子控件先放一个Image然后再放一个Canvas
  2. Canvas上我们可以绘制上纯颜色,也可以绘制另外一张图片
  3. 画布复合操作模式为destination-out
  4. 在Canvas的onTouch事件中,当TouchType.Move时,在当前坐标画一个小圆。
  5. 结束

按照这个思路,整体代码就是这样的

@Preview
@Component
export struct ScratchOffView {private settings: RenderingContextSettings = new RenderingContextSettings(true)private canvasRendering: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)private path: Path2D = new Path2D()build() {Stack() {Image($r("app.media.cat"))Canvas(this.canvasRendering).width("100%").height("100%").onReady(() => {let canvasWidth = this.canvasRendering.widthlet canvasHeight = this.canvasRendering.heightthis.canvasRendering.fillStyle = "#aaf7f7f7"this.canvasRendering.fillRect(0, 0, canvasWidth, canvasHeight)this.canvasRendering.strokeStyle = "#00000000"this.canvasRendering.fillStyle = "#000000"this.canvasRendering.globalCompositeOperation = "destination-out"}).onTouch((event: TouchEvent) => {let path = new Path2D()let prex = 0let prey = 0switch (event.type) {case TouchType.Down:prex = event.touches[0].xprey = event.touches[0].ypath.moveTo(prex, prey)breakcase TouchType.Move:this.path.moveTo(event.touches[0].x, event.touches[0].y)this.path.arc(event.touches[0].x, event.touches[0].y, 30, 0, Math.PI*2, false)this.canvasRendering.fill(this.path)breakcase TouchType.Up:break;}})}.width("100%").height("100%")}
}

最后放张效果图吧
在这里插入图片描述

总结

其实canvas并没有那么麻烦那么困难,我们只要熟悉了鸿蒙canvas的api,在Android上能实现的功能,鸿蒙能基本都能实现。比如手写签名、贝塞尔曲线、图片翻转、九宫格图片等等。
并不像我们想象中的那么困难,总之,先动手rua代码试试呗

总结

其实canvas并没有那么麻烦那么困难,我们只要熟悉了鸿蒙canvas的api,在Android上能实现的功能,鸿蒙能基本都能实现。比如手写签名、贝塞尔曲线、图片翻转、九宫格图片等等。
并不像我们想象中的那么困难,总之,先动手rua代码试试呗

http://www.dtcms.com/a/422036.html

相关文章:

  • 广州 Wix网站开发免费的英文电子外贸网站建设
  • 做网站新闻移动动态Wordpress 仿站 工具
  • 网络培训网站wordpress数据库e r图
  • 房山网站制作阿里云做的网站这么卡的
  • 湖南铁军工程建设有限公司官方网站asp做的网站频繁报错 参数错误
  • 有什么做网站优化公司seo论坛的网址
  • 网站如何申请微信支付专业做制作网站
  • 用ps怎么做网站首页合肥做个网站什么价格
  • 网站是什么公司做的公司做网站有意义么
  • 东山网站建设给个免费的网址
  • 网站设置密码访问莱芜的招聘平台
  • php网站建设实例视频教程网站开发的合同履行地
  • 东莞专业网站建站设计建筑模板是什么材料
  • 农林牧渔行业网站建设深圳新星公司官网
  • 网站loading动画效果淘宝网站的建设
  • 西安给大学做网站公司服务器试用
  • .net mvc做网站国外网站做调查
  • 青岛网站设计选哪家有一个做ppt的网站吗
  • 网站的命名规则网站建设 海口
  • 饰品设计网站推荐塘沽网站开发
  • 安卓网站开发ui想做苗木生意网站怎么怎么做
  • wordpress谷歌地图插件怎么用自己做的网站竞价优化
  • 中国建筑公司网站大全外贸公司招聘条件
  • 河南省建设银行网站织梦网站修改教程
  • 做外贸网站的价格福州有网站建设的公司排名
  • 网站登陆模板大连门户网站开发
  • 网站正在建设中...杭州市工程建设招标网
  • 怎么查看网站是否被百度收录西安网络技术有限公司
  • 文章网站模板免费ppt下载软件
  • 网站后台权限设计乐清网站推广