游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

10分钟鸿蒙应用实战开发鸿蒙手绘板(含源代码)

  前言:
  今天是鸿蒙的手机beta发布活动,很荣幸受邀来到现场,一会儿可以给大家上个靓照。
  本篇旨在通过实践一些样例,让开发者们快速提高肾上腺素,欢乐的加入鸿蒙应用开发之旅。整篇就是一个完整的实操样例,我也尽量在一片中把内容都讲清楚。
  基础的一些知识点,可以访问我另一个系列:《鸿蒙OS应用开发实践》
  正文
  (一)创建项目
  1。创建一个新的TV项目:
  2。创建一个新的Java类:
  命名为Draw:
  这个作为我们的绘画的核心组件,所以我们让他继承Component,方便后面的调用。需要注意的是,这里导入包名的时候,我们选择第一个:ohos。agp。components包。
  完成后,依然会报错,提示我们需要创建构造函数:
  同样默认会有很多构造方法,我们选择第一个(单个参数)即可。
  (二)实现绘画工具
  这样一个基础的组件类就创建好了,接着我们构思下一画板工具里需要哪些元素:
  画笔:用于画出各种点和线。
  画板:用于展现我们到底花了什么,它是内容的载体。
  所以,根据以上这些元素,在接下来我们需要在代码里定义和创建一些内容:
  PathmPathnewPath();
  PaintmPaint;
  PointmPrePointnewPoint();
  PointmPreCtrlPointnewPoint();
  Canvas:画布的意思,属于渲染组件,一般用于渲染各种界面元素,这里需要importohos。agp。render。Canvas;包
  Path:路径的意思,也属于渲染组件,用于描述绘制的路径。需要importohos。agp。render。Path;
  Paint:表示绘制,属于渲染组件,用于一些绘制操作,需要importohos。agp。render。Paint;
  Point:表示一个点,通常由二维坐标(x,y)组成,需要importohos。agp。utils。Point;
  所以上面的代码,我们先定义了一些等待使用的工具变量。
  现在我们缺少了一个东西,那就是如何交互?一般的,绘图这样的,我们要么鼠标,要么触屏,要么就是电子绘笔等。这里我们使用鸿蒙触摸组件来实现。
  在代码中去实现Component。TouchEventListener方法:
  实现onTouchEvent()方法:
  onTouchEvent包含两个参数:Component表示当前接收的组件,TouchEvent表示当前的触摸事件。
  通过getAction实例方法可以获取TouchEvent的状态:
  TouchEvent。PRIMARYPOINTDOWN:按下状态
  TouchEvent。PRIMARYPOINTUP:点按状态抬起
  TouchEvent。POINTMOVE:点按拖动
  我们需要在按下的时候开始记录点的位置,拖动的时候记录下整个轨迹,而抬起的时候则不做任何事情。
  所以,在onTouchEvent事件函数中,我们的代码这样写:
  switch(touchEvent。getAction()){
  caseTouchEvent。PRIMARYPOINTDOWN:{
  MmiPointpointtouchEvent。getPointerPosition(touchEvent。getIndex());
  mPath。moveTo(point。getX(),point。getY());
  mPrePoint。position〔0〕point。getX();
  mPrePoint。position〔1〕point。getY();
  mPreCtrlPoint。position〔0〕point。getX();
  mPreCtrlPoint。position〔1〕point。getY();
  returntrue;
  }
  caseTouchEvent。PRIMARYPOINTUP:
  break;
  caseTouchEvent。POINTMOVE:{
  break;
  }
  MmiPoint:表示是人机交互接口的一个Point,这里用来接收点击事件的点,需要importohos。multimodalinput。event。MmiPoint;
  然后在点击下去的这一下,指定路径mPath的moveTo目标为当前事件点击获得的点。
  同时也设置了两个预制缓存点的坐标为当前点击的点。
  抬起的操作,我们这里暂时不做处理。
  直接来处理下移动分支下的操作:
  caseTouchEvent。POINTMOVE:{
  MmiPointpointtouchEvent。getPointerPosition(touchEvent。getIndex());
  PointcurrCtrlPointnewPoint((point。getX()mPrePoint。position〔0〕)2,
  (point。getY()mPrePoint。position〔1〕)2);
  mPath。cubicTo(mPrePoint,mPreCtrlPoint,currCtrlPoint);
  mPreCtrlPoint。position〔0〕currCtrlPoint。position〔0〕;
  mPreCtrlPoint。position〔1〕currCtrlPoint。position〔1〕;
  mPrePoint。position〔0〕point。getX();
  mPrePoint。position〔1〕point。getY();
  invalidate();
  break;
  解析:
  同样用MmiPoint来接收点击输入,然后先说下mPath。cubicTo:使用path的cubicTo方法来实现三次贝塞尔曲线,就是说两个点之间的线有两个控制点。这样可以让曲线更加的平滑,它需要输入三个点的参数,所以,我们之前定义了两个Point变量,这里就需要用上了,整体上的原理就是,先把点击获得第一个点传入到曲线函数中,然后计算当前点击的位置加上第一个点的二分之一偏移量来细化得到一个更小的值来作为第三个参数,而第二个参数,我们让缓存的另一个点直接接收当前点击的点的值,然后传入到第二个参数中,最后又更新当前位置给第一个点,这样第一个点传入(旧的点),加上拖动后的当前点(新点),在当前点的二分偏移量的点,构成了三点传给了曲线函数,最后重新更新旧的点,让旧点变成一个新的位置,再次拖动的时候,就全部有了新的值,形成一个闭环。
  invalidate()函数表示申请重新绘制(刷新UI)。
  至此,我们就完成了点绘制(画笔)的计算方法。
  下一步,我们要实现让画笔的这些点和线呈现到画板(Canvas)上:
  追加实现Component。DrawTask的方法:
  然后根据提示实现onDraw方法
  在onDraw方法中添加如下实现:
  canvas。drawPath(mPath,mPaint);
  使用canvas的实例方法drawPath来将画笔和路径传入实现绘制。
  到这里还没完,我们还需要做一些初始化的工作,我们写一个Init函数:
  privatevoidInit()
  {
  mPaintnewPaint();
  mPaint。setColor(Color。WHITE);
  mPaint。setStrokeWidth(5f);
  mPaint。setStyle(Paint。Style。STROKESTYLE);
  addDrawTask(this::onDraw);
  setTouchEventListener(this::onTouchEvent);
  }
  这里将画笔实例化,并设置颜色、粗细及样式。然后添加绘制任务addDrawTask、设置点击事件的监听setTouchEventListener,这俩函数分别是画布和事件监听内置的函数,并非自定义的。
  最后,我们需要在Draw的构造函数中调用这个Init()方法,这样就可以在使用new创建这个Draw组件实例时自动初始化。
  (三)调用工具
  最后时调用我们写的这个绘画工具。
  回到slice目录,并打开MainAbilitySlice文件
  定义各一个方向布局:
  privateDirectionalLayoutdirectionalLayoutnewDirectionalLayout(this);
  在onStart方法中,创建一个布局配置,并将配置指定给方向布局:
  LayoutConfigconfignewLayoutConfig(LayoutConfig。MATCHPARENT,LayoutConfig。MATCHPARENT);
  directionalLayout。setLayoutConfig(config);
  接着创建刚才写好的Draw组件,需要添加importcom。qibiao。drawdemo。Draw;
  DrawdrawnewDraw(this);
  设置布局配置
  draw。setLayoutConfig(config);
  创建背景元素(这里设置为黑色,黑板嚒)
  ShapeElementelementnewShapeElement();
  element。setRgbColor(newRgbColor(0,0,0));
  设置背景元素
  draw。setBackground(element);
  将组件添加到布局中
  directionalLayout。addComponent(draw);
  设置UI内容:
  super。setUIContent(directionalLayout);
  完整代码如下:
  (四)运行效果
  运行一个TV的远程模拟器,然后run:
  手写一个:你好,鸿蒙
  看起来还不错(别在意细节)。
  不过,还不够完美,我们再给他弄个擦除的功能。
  回到Draw
  添加一个重置的方法:
  然后再到MainAbilitySlice中添加一个按钮,并调用clear方法:
  再次运行已经支持擦除。
  (五)完整代码
  ok,本篇已经务必尽量精简了,最后放上代码链接(已开源):
  https:gitee。comdoufxdrawcomponent

如果外星人来奴役人类,要求人类不许工作只需休息娱乐,人类会反在刘慈欣的小说《诗云》里,描述了这样一种情景。外星人彻底征服了地球,人类的反抗彻底失败。在外星人打算把人类彻底消灭时,发现人类的肉很好吃,于是人类这一种族就被保留下来。外……微软宣布为DirectX12带来可变速率着色功能微软很高兴地宣布,DirectX12正式成为了首款为可变速率着色功能提供广泛硬件支持的图形API,允许开发者以更加高效和智能的方式去调用GPU资源。系统需要计算屏幕中每个像素应……不到三百元的无线充电宝却有苹果原装充电宝的功能,你会买吗?现如今出门在外最不可缺少的就是手机等一系列的电子设备,要保证它们24小时都处于满血状态供我们工作、娱乐。一款好的移动电源也是必不可少!尤其是在旅途当中,携带一款机身轻薄容量又大……Waymo上线倒计时?在旧金山公测自动驾驶出租车服务近日,Alphabet旗下Waymo宣布将在美国旧金山推出一个以研究为目的的TrustedTester项目,其目的是让用户帮助它改进服务。用户注册WaymoOne应用后,当需要……年轻人只是偏爱无广告的APP光明网评论员:本意为了方便老年人使用的APP老年模式,如今广受年轻人追捧。媒体报道称,随着中国60岁及以上网民群体比例的增长,互联网企业开始纷纷争夺老年用户,先后推出了页面更简……机器人汇总劢微极智嘉未来机器人万集快仓蓝芯上榜【上周大事件】汇总是根据上一周在【518智能装备在线】的PC版、公众号以及相关十多家平台的实际行为而推出,如点击、收藏、联系、搜索、分享等。此汇总针对不同维度所形成,包含项目介……windows自动弹出恶意广告怎么办我们学校使用的是希沃多媒体教学,但是有个问题就是老师正在讲课,就弹出一些不雅广告,让学生和老师都很尴尬,今天就来说说关于Windows弹出恶意广告的事。大家在安装网上的下载软件……传美国能源部即将就采购英伟达(NVDA。US)和AMD(AM智通财经APP获悉,据报道,美国能源部即将达成一项协议,采购一台使用英伟达(NVDA。US)和AMD(AMD。US)芯片的超级计算机。英伟达和AMD芯片超级计算机将被命名为Po……不止有iPhone13,苹果新系统曝光,新功能令人期待马上就要进入六月,iPhone13也即将进行量产。对于不少用户来讲,iPhone13的配置、外观是否改变,是大家比较好奇的重点。从目前曝光的信息来看,iPhone13刘海缩小、……人物闪电将军李炳忠37个月,如何攻下全球1亿台手机?记者林腾陆柯言卖出1亿台手机需要多长的时间?三星花了73个月,苹果花了44个月,华为用了62个月。但有一家叫realme的新手机公司,仅仅用了37个月的时间就实现了……芯片行业风波再起,两大消息传来,台积电市值超越腾讯阿里本文原创,禁止抄袭,违者必究!在过去的二十年,无疑是互联网的天下,成立仅10年,20年的互联网企业,不论是公司盈利能力,还是员工工资水平,几乎是全方位碾压传统行业。……工信部复查违规App,治理乱象不能仅靠企业自律文东方亦落为什么如此多的App都屡教不改?近日,工信部发布了关于App存在问题的回头看通报。通报显示,有43款App仍然存在技术手段对抗、同一问题在不同地域整改不一致的情……
驶入算力时代,车企开启军备竞赛一场围绕自动驾驶展开的权力游戏正在拉开大幕。文Toretto过去的百年时间里,马力让全球的城市与工业疯狂生长。即便在如今电动汽车崛起的时代,人们仍旧习惯用马力来表达……今年过年不回家翻看老照片全家福里美好的回忆找到回家的感觉什么是家,不同的人,处在不同成长时期、不同环境对家的定义和认识是不同的。小时候,父母在哪里家就在哪里,这是小家,父母的父母在哪里,那里就是两个大家。妈妈四兄妹和姥姥……VIVO全新OriginOS有多能打,几点感受与剖析交互体验与设计理念当VIVO全新系统OriginOS刚一出来的时候,相信大多数关注的人以及VIVO粉丝们都会有眼前一亮的感觉,一定会被其清新的桌面风格以及每个功能点所传达……家里盖的4层别墅现在成街坊的笑话房子是前年盖的,村里很多在自己地里盖新房子,有几家已经有五层高了。后来公公和老公商量着建个四层楼,成果预算不行,把装修的钱都花上了,真是无语了。一楼,都没有装修,地上就是……矿视界译文Chia加入开放计算项目,助推存储循环经济8月30日,Chia官方宣布加入开放计算项目(OpenComputeProject),为存储的可持续性做出贡献。开放计算项目以运营Facebook和Microsoft等超……2张A4纸轻薄的手机壳,不烫不重,听说还能防弹?最早的电脑重30t,有好几个房间那么大,早前的手机是块砖头,大哥大重量来说话。3C数码厂商们全部朝着轻薄前进,但是它却很轻易抹杀了所有手机厂商的努力。有人曾经……中国山寨机三巨头,一个比一个会抄,90后机友基本都用过对于80后、90后机友而言,山寨机这个词仿佛还是昨天。中国机圈刚起步那几年,国内许多人基本都用过山寨机。以至于,国内诞生了一个比一个会抄的山寨机品牌巨头企业。不过,随着小……14。58万起售,新款红旗H5正式上市,升级全新3。0智能网日前,我们从一汽红旗官方获悉,2022款红旗H5正式上市,新车共推出6款车型,价格区间为14。5819。08万元,作为年度改款车型,新车的整体变化并不大,主要针对外观细节和配置……快来看看你家的房子会不会被收税了?为积极稳妥推进房地产税立法与改革,引导住房合理消费和土地资源节约集约利用,促进房地产市场平稳健康发展,第十三届全国人民代表大会常务委员会第三十一次会议决定:授权国务院在部分地区……炒菜不再手忙脚乱地按开关,云米cross2X1烟灶套装大家好,我是手撕鲈鱼。我家的抽油烟机和燃气灶还是8年前交房时开发商赠送的,用了这么多年,加上我们一直也没咋清理现在抽油烟机基本不咋抽油烟了,加上我妈时不时就忘记关火,烧干……中国移动将在人机交互类脑计算等方面加强技术攻关中国移动副总经理高同庆27日在2021世界互联网大会乌镇峰会人工智能分论坛介绍,中国移动将加大人工智能领域的基础研究和关键技术攻关。高同庆介绍,中国移动将在智能计算、人机……国产新能源汽车出海,要靠什么才能吃下欧洲市场这块巨大的奶酪?在相当长的一段时间中,国内汽车厂商想打开海外市场,更多需要依靠投资收购、合资等手段,很难将自己的产品出口到国外。曾几何时,最轰动的国产汽车出海新闻,可能要属土豪花费3万美……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网