效果:


点击左边三角形区域,左边变蓝,点击右边,右边变蓝。

分析:


我们根据当前触摸点的横竖坐标,求基于右上角的Sin值,如果Sin值大于分割线所在的Sin值,说明在右下,否则在左上。

代码

public class TriangleView extends View {private Paint mPaint;private int mWidth;private int mHeight;private Path mLeftPath;private Path mRightPath;private float mFloat;int mSide = -1;public static final int RIGHT = 1;public static final int LEFT = -1;private float mSin;public TriangleView(Context context) {super(context);init(context);}public TriangleView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context);}public TriangleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}private void init(Context context) {mPaint = new Paint();mPaint.setColor(Color.BLUE);mPaint.setStyle(Paint.Style.FILL);}@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);mWidth = w;mHeight = h;mLeftPath = new Path();mLeftPath.lineTo(0,0);mLeftPath.lineTo(mWidth,0);mLeftPath.lineTo(0,mHeight);mLeftPath.close();mRightPath = new Path();mRightPath.moveTo(mWidth,0);mRightPath.lineTo(mWidth,0);mRightPath.lineTo(mWidth,mHeight);mRightPath.lineTo(0,mHeight);mRightPath.close();mFloat = (float)mHeight / mWidth;float i = (float) Math.sqrt(mWidth * mWidth + mHeight * mHeight);mSin = mHeight / i;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawPath(isLeft() ? mLeftPath : mRightPath,mPaint);}@Overridepublic boolean onTouchEvent(MotionEvent event) {float x = event.getX();float y = event.getY();double sqrt = Math.sqrt((mWidth -x) * (mWidth -x) + y * y);double v1 = y / sqrt;if (v1 >= mSin) {mSide = RIGHT;}else {mSide = LEFT;}switch (event.getAction()) {case MotionEvent.ACTION_UP:invalidate();break;}return super.onTouchEvent(event);}public int getSide(){return mSide;}public boolean isLeft(){return getSide() == LEFT;}}

Android 三角形控件相关推荐

  1. Android开源控件ViewPager Indicator的使用方法

     1月16日厦门 OSC 源创会火热报名中,奖品多多哦   摘要 Android开源控件ViewPager Indicator的使用介绍 ViewPagerIndicator 目录[-] 1. V ...

  2. 日历控件的android代码,Android日历控件PickTime代码实例

    Android日历控件PickTime代码实例 发布时间:2020-10-03 16:05:51 来源:脚本之家 阅读:86 作者:手撕高达的村长 最近做项目,需要设置用户的生日,所以做这样一个功能. ...

  3. android 获取控件高度_安卓开发入门教程UI控件_ImageView

    什么是ImageView ImageView是用于显示图片的UI控件. 基础样例 1.展示本地图片 效果图 代码 <ImageViewandroid:layout_width="wra ...

  4. xamarin.android 控件,Android 库控件 - Xamarin | Microsoft Docs

    Xamarin Android 库控件Xamarin.Android Gallery control 03/15/2018 本文内容 Gallery是一种布局小组件,用于显示水平滚动列表中的项,并将当 ...

  5. android 获取控件在屏幕中的坐标

    今天,简单讲讲android如何获取控件在屏幕中的坐标. 这个其实也很简单,但是昨天做一个功能时,需要功能控件的坐标做一些逻辑操作时,居然不知道怎么做.所以在网上查找了资料后,解决了这个问题.这里记录 ...

  6. Android图表控件MPAndroidChart——曲线图LineChart的使用(财富收益图)

    目录 前言 本文涉及文章 其他相关文章 1.数据准备 1.1 数据来源 2.曲线展示 2.1 MPAndroidChart获取 2.2 数据对象获取 2.3 数据展示 3.曲线完善 3.1 图表背景. ...

  7. Android AutoCompleteTextView控件实现类似百度搜索提示,限制输入数字长度

    Android AutoCompleteTextView 控件实现类似被搜索提示,效果如下 1.首先贴出布局代码 activity_main.xml: <?xml version="1 ...

  8. android控件使用大全,Android常见控件使用详解

    本文实例为大家分享了六种Android常见控件的使用方法,供大家参考,具体内容如下 1.TextView 主要用于界面上显示一段文本信息 2.Button 用于和用户交互的一个按钮控件 //为Butt ...

  9. android组件用法说明,Android第三方控件PhotoView使用方法详解

    Android第三方控件PhotoView使用方法详解 发布时间:2020-10-21 15:06:09 来源:脚本之家 阅读:74 作者:zhaihaohao1 PhotoView的简介: 这是一个 ...

最新文章

  1. php实现中英文网站插件,多语言网站方案
  2. (六)构建Docker私有仓库、Gitlab仓库和持续集成环境
  3. vb实时错误6 溢出_java内存溢出系列(6): Out of swap space?
  4. Mysql ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA
  5. android webview 下载视频播放 206,Android webview+Html5 video
  6. 别慌,谷歌说AutoML无意取代工程师,AI人才缺口仍然巨大
  7. python练手经典100例-【Python精华】100个Python练手小程序
  8. 图纸管理软件_企业图纸文档的安全管理与使用,是否遇到这些图纸管理问题?...
  9. 单片机发射红外c语言程序,基于单片机的红外发射C语言程序
  10. Android App开机自启动
  11. PDF转PNG高清不失帧
  12. 电脑副业能做什么?一台电脑能做的副业
  13. 人工智能的必须的数学基础和编程基础
  14. 智能手表产业迎来潜在的市场空间
  15. 后端程序员必备的 Linux 基础知识+常见命令(近万字总结)
  16. RabbitMq消息队列进一步认识
  17. 前端大文件上传断点续传解决方案
  18. 腾讯云服务器windows系统重装为Linux系统
  19. 准确率、召回率、F值
  20. TL431NSG-A 友顺UTC

热门文章

  1. 产品经理 需求 项目经理 选择_产品经理和项目经理的区别
  2. 后台定时给页面发送数据_苹果CMS10全自动定时采集教程
  3. linux redis数据库安装配置,Linux系统中redis的安装配置步骤
  4. oracle 06502 解决,ora-06502如何解决。。。
  5. mysql5.5.28安装详最后一个步骤时为啥一直转_mysql5.7.28下载、安装、登陆步骤详解...
  6. Google Guava 概要
  7. Linux日常运维管理技巧
  8. pypy的安装及使用介绍
  9. linux下rpm包和命令使用简介
  10. 自己写的小程序 deb打包