首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用onTouchEvent或任何其他方法在graphView上绘制形状?

使用onTouchEvent或其他方法在graphView上绘制形状可以通过以下步骤实现:

  1. 首先,创建一个自定义的View,并在该View中重写onTouchEvent方法。在该方法中,你可以监听触摸事件并根据需要进行处理。
  2. 在自定义View的构造方法中,初始化一些绘图相关的变量,例如画笔的颜色、线条的宽度等。
  3. 在自定义View的onDraw方法中,使用Canvas类来进行绘制操作。你可以使用Canvas提供的方法绘制线条、矩形、圆形等形状。
  4. 在onTouchEvent方法中,根据触摸事件的不同动作(如按下、移动、抬起),更新绘图相关的变量,并调用invalidate方法触发重新绘制。

以下是一个示例代码:

代码语言:txt
复制
public class GraphView extends View {
    private Paint paint;
    private Path path;
    private float startX, startY, endX, endY;

    public GraphView(Context context) {
        super(context);
        init();
    }

    public GraphView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(5f);
        paint.setStyle(Paint.Style.STROKE);
        path = new Path();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPath(path, paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                startX = event.getX();
                startY = event.getY();
                path.moveTo(startX, startY);
                return true;
            case MotionEvent.ACTION_MOVE:
                endX = event.getX();
                endY = event.getY();
                path.lineTo(endX, endY);
                break;
            case MotionEvent.ACTION_UP:
                endX = event.getX();
                endY = event.getY();
                path.lineTo(endX, endY);
                break;
            default:
                return false;
        }
        invalidate();
        return true;
    }
}

通过以上代码,你可以在GraphView上进行手指触摸绘制线条的操作。在触摸事件中,按下时记录起始点的坐标,并移动时不断将终点坐标添加到绘制路径中,最后通过invalidate方法触发重新绘制。

对于更复杂的形状绘制,你可以根据需要使用Canvas提供的其他绘制方法,如绘制矩形(drawRect)、圆形(drawCircle)、文字(drawText)等。

推荐的腾讯云相关产品:腾讯云移动应用分析(https://cloud.tencent.com/product/growingio)、腾讯云人工智能(https://cloud.tencent.com/product/ai)、腾讯云音视频处理(https://cloud.tencent.com/product/mp)、腾讯云数据库(https://cloud.tencent.com/product/cdb)。

相关搜索:如何使用eSignature或任何其他Docusign API从DSA模拟"CreateAndSignField“方法如何使用if语句或使用任何其他合适的方法从for循环创建子图使用javascript或其他方法在不同的域上设置cookie使用Visual Studio 2010在Vista上安装boost 1.42(或任何其他版本)如何使用free()或任何其他方法从指针数组中间删除元素?如何使用z-index或任何其他方法在引导转盘中定位元素?如何使用execvp或任何其他exec来仅在一个文件上运行?如何通过使用列表理解或任何其他方法使我的函数更简洁?在漂亮的汤或动态网页上的任何其他库上使用python进行Web抓取如何使用jquery或任何其他方法在前端实现产品的复选框选择如何使用Matplotlib或其他工具在动画中绘制不规则采样的时间数据?如何在java上阅读html而不使用jsoup或任何其他第三方?我想在固定的行中拆分多列。在EXCEL中使用power查询或任何其他方法如何使用<Link>或任何其他方式在react js中使表的整行可点击?如何使用binarySearch或其他方法在字符串数组中搜索字符串?在不使用yum (或任何其他软件包管理软件)的RHEL上安装net-snmp如何通过给定x,y坐标在使用selnium (或任何其他webdriver)的网站上移动鼠标如何使用ggplot或plotly在具有多个层次的分类Y上绘制数字X的图形?在Pandas中或使用Python中的任何其他库时,有没有更好的方法来实现类似的结果如何使用Tomcat (或其他解决方案)正确部署.jar文件?在EC2实例上
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

基于 HTML5 OpenLayers3 实现 GIS 电信资源管理系统

是通过 GraphViewControl 父类方法新添加的一个方法并且初始化值为 ht.graph.GraphView(https://hightopo.com/guide/guide/core/...这里我子类 GraphViewControl 中重载了父类 ol.control.Control 的 setMap 方法,在此方法中将 HT 的拓扑组件 graphView 添加到 OpenLayers..._graphView.sm().cs();// 清除所有选中 }  tearDown 方法在对象结束调用的时候被调用,绘制连线的时候,如果未结束绘制怎么办?..._graphView.addTopPainter(this);// 增加顶层Painter 使用Canvas的画笔对象自由绘制任意形状,顶层Painter绘制拓扑最上面 this....我们可以 graphView 上进行绘制节点的编辑、绘制连线、绘制直角连线以及绘制多边形。

3.8K60

HTML5 网络拓扑图性能优化

既然绘制文本的性能消耗无法避免,那么我们要如何提高系统的整体性能呢?...换个思路,绘制文本会有高性能消耗,导致操作上面的延迟和卡顿,那么我是不是可以操作时不绘制文本呢,将文本绘制所消耗的性能节省下来,用在其他的性能消耗,这样是不是就可以解决操作延迟和卡顿的问题呢?...我们不妨来试试, GraphView 中添加若干个 node、edge、group 等节点,并且每个节点都显示文本(包括线条,上图所示),看看拓扑的缩放效果怎么样。...接下来调用 createNodes 方法创建所有的节点,创建完代码后,创建一个 AutoLayout 来自动布局所有节点,自动布局为开发人员节省手动布局的时间,效率大大提升,布局完后,让 GraphView...GraphView 的 mi(addInteractorListener)方法是监听用户对 GraphView 的操作动作,监听到 beginPan 时将 panning 状态设置为 true ,监听到

1.4K50
  • 基于 HTML5 Canvas 的简易 2D 3D 编辑器

    我们首先将所有需要用到的 json 文件作为矢量图输出,矢量图的好处是组件的图元缩放都不会失真,并且不再需要为 Retina 显示屏提供不同尺寸的图片,  devicePixelRatio 多样化的移动时代...,groupId 是将一个类型的元素分组,分组的好处是我们选中这个组中的任意一个元素的时候,其他的元素都不选中,就能造成“单选”的效果: toolbar = new ht.widget.Toolbar...,第一个参数为类名,第二个参数为继承的类,第三个参数为此类的方法 //这边重新绘制这个类的方法 } 接着就是向这个类中添加我们需要的功能,主要的功能是“鼠标点击事件的触发”以及“触摸屏幕事件的触发...this.createNode(rect, false);//调用 createNode 函数 } } 然后拖拽结束的时候做结束绘制图形的操作,这里我是直接设置绘制结束后就将工具条选中...最后,我们只要知道如何绘制图元就好了, HT 中,基础的图元都可以通过设置样式中的 shape 或者 shape3d 来生成不同的图元,我们这边就是通过这种途径,如果想要在界面中生成复杂图形,如:机柜模型

    2.2K70

    HTML5 网络拓扑图性能优化

    既然绘制文本的性能消耗无法避免,那么我们要如何提高系统的整体性能呢?...换个思路,绘制文本会有高性能消耗,导致操作上面的延迟和卡顿,那么我是不是可以操作时不绘制文本呢,将文本绘制所消耗的性能节省下来,用在其他的性能消耗,这样是不是就可以解决操作延迟和卡顿的问题呢?...我们不妨来试试, GraphView 中添加若干个 node、edge、group 等节点,并且每个节点都显示文本(包括线条,上图所示),看看拓扑的缩放效果怎么样。...接下来调用 createNodes 方法创建所有的节点,创建完代码后,创建一个 AutoLayout 来自动布局所有节点,自动布局为开发人员节省手动布局的时间,效率大大提升,布局完后,让 GraphView...GraphView 的 mi(addInteractorListener)方法是监听用户对 GraphView 的操作动作,监听到 beginPan 时将 panning 状态设置为 true ,监听到

    1.7K60

    基于HTML5快速搭建TP-LINK电信拓扑设备面板

    ('tplink'); dataModel.add(node);     甚至最新版的HT中,已经支持无需注册,直接调用setImage(),传入URL参数的方式(我的Demo中就是使用的这种方法...HT默认提供的是直线和多点连线,但是绘制流程图、组织结构图和思维导图等应用还需要更多的连线类型,  详情戳HT for Web连线类型手册(http://www.hightopo.com/guide/...我们的Demo中,两条连接服务器和TP-LINK的曲线,均是使用自定义的新连线类型。   ...,其实这个方法是用于设置连线和图元的层级,因为默认的层级是edgenode之下,所以需要设置层级后,调用graphView的setLayers方法更改层级之间的关系:  graphView.setLayers...其实这里有一个坑,那就是计算length之前,必须先调用graphView.validate(),为什么呢?

    1.3K100

    原 基于 HTML5 Canvas 的简易

    我们首先将所有需要用到的 json 文件作为矢量图输出,矢量图的好处是组件的图元缩放都不会失真,并且不再需要为 Retina 显示屏提供不同尺寸的图片,  devicePixelRatio 多样化的移动时代...,groupId 是将一个类型的元素分组,分组的好处是我们选中这个组中的任意一个元素的时候,其他的元素都不选中,就能造成“单选”的效果: toolbar = new ht.widget.Toolbar...,第一个参数为类名,第二个参数为继承的类,第三个参数为此类的方法 //这边重新绘制这个类的方法 } 接着就是向这个类中添加我们需要的功能,主要的功能是“鼠标点击事件的触发”以及“触摸屏幕事件的触发...this.createNode(rect, false);//调用 createNode 函数 } } 然后拖拽结束的时候做结束绘制图形的操作,这里我是直接设置绘制结束后就将工具条选中...最后,我们只要知道如何绘制图元就好了, HT 中,基础的图元都可以通过设置样式中的 shape 或者 shape3d 来生成不同的图元,我们这边就是通过这种途径,如果想要在界面中生成复杂图形,如:机柜模型

    1.1K40

    基于HTML5快速搭建TP-LINK电信拓扑设备面板

    ('tplink'); dataModel.add(node);     甚至最新版的HT中,已经支持无需注册,直接调用setImage(),传入URL参数的方式(我的Demo中就是使用的这种方法...HT默认提供的是直线和多点连线,但是绘制流程图、组织结构图和思维导图等应用还需要更多的连线类型,  详情戳HT for Web连线类型手册(http://www.hightopo.com/guide/...我们的Demo中,两条连接服务器和TP-LINK的曲线,均是使用自定义的新连线类型。   ...,其实这个方法是用于设置连线和图元的层级,因为默认的层级是edgenode之下,所以需要设置层级后,调用graphView的setLayers方法更改层级之间的关系:  graphView.setLayers...其实这里有一个坑,那就是计算length之前,必须先调用graphView.validate(),为什么呢?

    84730

    基于HT for Web矢量实现HTML5文件上传进度条

    HTML中,文件上传的过程中,很多情况都是没有任何的提示,这在体验很不好,用户都不知道到时有没有在上传、上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件上传进度条...其实原因很简单,我们修改value值时,并没有通知graphView要更新,因此进度条并不会因为node的value值改变而有所改变,那么我们该如何通知graphView更新呢?...但是还有一点不足,进度条虽然跑了,但是我们还是不知道当前进度值是多少,只能通过进度条的比重来大致估计当前进度值,我们能否进度条添加一个文本,用来显示当前进度值呢,答案是肯定的,我们只需要在矢量的comps...有一点需要注意,clip()方法截取的内容只对调用该方法绘制的内容有效,调用该方法之前绘制的内容并不会被截掉。因此以下代码必须放在绘制背景的代码前。...再者,我们需要结合ajax无刷新向服务器上传文件,并结合socket技术监听服务器事件,浏览器如何使用socket可以参考:HT for Web的HTML5树组件延迟加载技术实现。

    1.3K90

    HTML5矢量实现文件上传进度条

    HTML中,文件上传的过程中,很多情况都是没有任何的提示,这在体验很不好,用户都不知道到时有没有在上传、上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件上传进度条...其实原因很简单,我们修改value值时,并没有通知graphView要更新,因此进度条并不会因为node的value值改变而有所改变,那么我们该如何通知graphView更新呢?...但是还有一点不足,进度条虽然跑了,但是我们还是不知道当前进度值是多少,只能通过进度条的比重来大致估计当前进度值,我们能否进度条添加一个文本,用来显示当前进度值呢,答案是肯定的,我们只需要在矢量的comps...有一点需要注意,clip()方法截取的内容只对调用该方法绘制的内容有效,调用该方法之前绘制的内容并不会被截掉。因此以下代码必须放在绘制背景的代码前。...再者,我们需要结合ajax无刷新向服务器上传文件,并结合socket技术监听服务器事件,浏览器如何使用socket可以参考:HT for Web的HTML5树组件延迟加载技术实现。

    2.4K80

    基于HT for Web矢量实现HTML5文件上传进度条

    HTML中,文件上传的过程中,很多情况都是没有任何的提示,这在体验很不好,用户都不知道到时有没有在上传、上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件上传进度条...其实原因很简单,我们修改value值时,并没有通知graphView要更新,因此进度条并不会因为node的value值改变而有所改变,那么我们该如何通知graphView更新呢?...但是还有一点不足,进度条虽然跑了,但是我们还是不知道当前进度值是多少,只能通过进度条的比重来大致估计当前进度值,我们能否进度条添加一个文本,用来显示当前进度值呢,答案是肯定的,我们只需要在矢量的comps...有一点需要注意,clip()方法截取的内容只对调用该方法绘制的内容有效,调用该方法之前绘制的内容并不会被截掉。因此以下代码必须放在绘制背景的代码前。...再者,我们需要结合ajax无刷新向服务器上传文件,并结合socket技术监听服务器事件,浏览器如何使用socket可以参考:HT for Web的HTML5树组件延迟加载技术实现。

    82120

    HTML5矢量实现文件上传进度条

    HTML中,文件上传的过程中,很多情况都是没有任何的提示,这在体验很不好,用户都不知道到时有没有在上传、上传成功了没有,所以今天给大家介绍的内容是通过HT for Web矢量来实现HTML5文件上传进度条...其实原因很简单,我们修改value值时,并没有通知graphView要更新,因此进度条并不会因为node的value值改变而有所改变,那么我们该如何通知graphView更新呢?...但是还有一点不足,进度条虽然跑了,但是我们还是不知道当前进度值是多少,只能通过进度条的比重来大致估计当前进度值,我们能否进度条添加一个文本,用来显示当前进度值呢,答案是肯定的,我们只需要在矢量的comps...有一点需要注意,clip()方法截取的内容只对调用该方法绘制的内容有效,调用该方法之前绘制的内容并不会被截掉。因此以下代码必须放在绘制背景的代码前。...再者,我们需要结合ajax无刷新向服务器上传文件,并结合socket技术监听服务器事件,浏览器如何使用socket可以参考:HT for Web的HTML5树组件延迟加载技术实现。

    2.6K40

    百度地图、ECharts整合HT for Web网络拓扑图应用

    在这个Demo中,将GraphView拓扑图组件添加到百度地图组件中,覆盖百度地图组件之上,并且百度地图组件GraphView拓扑图组件分别添加事件监听,相互同步经纬度和屏幕位置信息,从而来控制拓扑图上的组件位置固定在地图上...,方法中处理的逻辑也很简单:每次方法执行的时候调用图表的reset方法重新设定图标的展示大小,如果该方法是第一次执行的话,就调用图表的restore方法将图表还原为最原始的状态。...会有这样的设计是因为ht.Chart类中的view是动态创建的,没有添加到dom之前将一直存在于内存中,在内存中因为并没有浏览器宽高信息,所以div的实际宽高均为0,因此chart将option内容绘制宽高为...接下来就是创建panel图表组件了,这是HT for Web的Panel组件的基本用法,其中content属性的值可以是HT for Web的任何组件div元素,如果是HT fro Web组件的话,该组件必须实现了...GraphView中添加交互监听,如果在GraphView中做了框选操作,框选结束后,将原本legend插件被选中的节点取消选中,然后再获取被选中节点,并在legend插件上选中对应节点;当GraphView

    1.2K20

    ECharts+BaiduMap+HT for Web网络拓扑图应用

    在这个Demo中,将GraphView拓扑图组件添加到百度地图组件中,覆盖百度地图组件之上,并且百度地图组件GraphView拓扑图组件分别添加事件监听,相互同步经纬度和屏幕位置信息,从而来控制拓扑图上的组件位置固定在地图上...,方法中处理的逻辑也很简单:每次方法执行的时候调用图表的reset方法重新设定图标的展示大小,如果该方法是第一次执行的话,就调用图表的restore方法将图表还原为最原始的状态。...会有这样的设计是因为ht.Chart类中的view是动态创建的,没有添加到dom之前将一直存在于内存中,在内存中因为并没有浏览器宽高信息,所以div的实际宽高均为0,因此chart将option内容绘制宽高为...接下来就是创建panel图表组件了,这是HT for Web的Panel组件的基本用法,其中content属性的值可以是HT for Web的任何组件div元素,如果是HT fro Web组件的话,该组件必须实现了...GraphView中添加交互监听,如果在GraphView中做了框选操作,框选结束后,将原本legend插件被选中的节点取消选中,然后再获取被选中节点,并在legend插件上选中对应节点;当GraphView

    1K10

    基于 HTML5 结合互联网+的电力接线图

    工业互联网的典型应用,也不都是机器,包括照明、智能交通、智能机器应用、工厂控制、厂房应用、状态监控,以及其他农业、电力设备的应用,互联网+的应用会越来越广,传统的电力企业还是需要跟紧步伐。 ?... HT 中所有能用栅格位图的地方都可用矢量图形替代,例如 GraphView 组件的图元图片,TreeView 和 TableView 的图标等, 甚至整个 HT 框架做出来的系统界面可以实现全矢量化...,这样 GraphView 组件的图元缩放都不会失真,并且不再需要为 Retina 显示屏提供不同尺寸的图片,  devicePixelRatio 多样化的移动时代, 要实现完美的跨平台,矢量可能是的最低成本的解决方案...类型,可利用 canvas 画笔绘制,实现自定义裁剪任意形状的效果 那么我们来看看这个图标是怎么用 HT 绘制的: ?...那么问题来了,如何GraphView 中载入图纸的 json 文件?

    1.1K20

    基于 HTML5 的电力接线图 SCADA 应用

    HT for Web 中所有能用栅格位图的地方都可用矢量图形替代,例如 GraphView 组件的图元图片,TreeView 和 TableView 的图标等, 甚至整个 HT 框架做出来的系统界面可以实现全矢量化...,这样 GraphView 组件的图元缩放都不会失真,并且不再需要为 Retina 显示屏提供不同尺寸的图片,  devicePixelRatio 多样化的移动时代, 要实现完美的跨平台,矢量可能是的最低成本的解决方案... HT 中,矢量采用 JSON 格式描述,使用方式和普通的栅格位图一致,通过 ht.Default.setImage('hightopo', jsonObject) 进行注册, 使用是将相应图片注册名设置到数据模型即可...类型,可利用 canvas 画笔绘制,实现自定义裁剪任意形状的效果 那么我们来看看这个图标是怎么用 HT 绘制的: ?...那么问题来了,如何GraphView 中载入图纸的 json 文件?

    1.5K30

    掌握Android自定义View与独家优化技巧

    本文将详细介绍如何创建自定义View,并提供优化技巧,以确保你的自定义View性能和用户体验方面表现出色。...在这里,你可以使用Canvas对象进行绘制操作,包括绘制形状、文本、位图等。...测量和布局:正确实现onMeasure和onLayout方法,以确保自定义View布局中正确地排列和测量。 绘制顺序:了解绘制顺序,确保子View父View之上正确绘制,避免遮挡重叠。...// ... } } 使用合适的绘制方法 根据需求选择适当的绘制方法,以提高性能。...自定义View的类中,你可以创建一个Canvas和一个Bitmap,然后Canvas绘制内容。这样,onDraw方法中,你只需要将Bitmap绘制到屏幕,而不必每次都重新绘制内容。

    49520

    HT For Web 拓扑图背景设置

    ,不过图元如何缩放和移动,都保持原来的样子。      ...这两张图片展示的是通过graphView.addBottomPainter(function(g, rect){...})方法绘制拓扑图组件背景,通过graphView.addTopPainter(function...(f, rect){...})方法绘制拓扑图组件的水印效果,左边的图片展示的是页面初始效果,右边展示的是拓扑图通过缩小和拖拽图元位置后的效果,从效果可以看出,拓扑图的背景和水印的位置和大小均发生了改变...代码中addBottomPainter画的就是灰白相间的背景图片,addTopPainter绘制的是系统当前时间,最后通过定时器setInterval设置1秒刷新一次graphView拓扑图组件。...方法图片加载完成后设置bgNode的position,最后设置一堆的node节点在nodeLayer图层,一堆的edge连线edgeLayer图层

    1.5K60

    Android自定义控件总结

    绘制流程 onMeasure测量view的大小,设置自己显示屏幕的宽高。...如果希望视图的绘制流程(三步)可以完完整整地重新走一遍,就不能使用invalidate()方法,而应该调用requestLayout()了。...控制显示屏幕的样子(自定义viewgroup时不需要这个) /* * backgroundBitmap 要绘制的图片 * left 图片的左边界 * top 图片的上边界 * paint 绘制图片要使用的画笔...,子View中如果将传递的事件消费掉,ViewGroup中将无法接收到任何事件。 onTouchEvent 一般自定义控件都需要去重写onTouchEvent方法。...三种滑动的方法 使用scrollTo()scrollBy() 动画 实时改变layoutparams,重新布局 如果让view一段时间内移动到某个位置(不是快速滑动,弹性)方法: a.使用自定义动画

    99311

    Android自定义控件总结

    绘制流程 onMeasure测量view的大小,设置自己显示屏幕的宽高。...如果希望视图的绘制流程(三步)可以完完整整地重新走一遍,就不能使用invalidate()方法,而应该调用requestLayout()了。...控制显示屏幕的样子(自定义viewgroup时不需要这个) /* * backgroundBitmap 要绘制的图片 * left 图片的左边界 * top 图片的上边界 * paint 绘制图片要使用的画笔...,子View中如果将传递的事件消费掉,ViewGroup中将无法接收到任何事件。 onTouchEvent 一般自定义控件都需要去重写onTouchEvent方法。...三种滑动的方法 使用scrollTo()scrollBy() 动画 实时改变layoutparams,重新布局 如果让view一段时间内移动到某个位置(不是快速滑动,弹性)方法:  a.使用自定义动画

    1.3K80

    HT For Web 拓扑图背景设置

    ,不过图元如何缩放和移动,都保持原来的样子。      ...这两张图片展示的是通过graphView.addBottomPainter(function(g, rect){...})方法绘制拓扑图组件背景,通过graphView.addTopPainter(function...(f, rect){...})方法绘制拓扑图组件的水印效果,左边的图片展示的是页面初始效果,右边展示的是拓扑图通过缩小和拖拽图元位置后的效果,从效果可以看出,拓扑图的背景和水印的位置和大小均发生了改变...代码中addBottomPainter画的就是灰白相间的背景图片,addTopPainter绘制的是系统当前时间,最后通过定时器setInterval设置1秒刷新一次graphView拓扑图组件。...方法图片加载完成后设置bgNode的position,最后设置一堆的node节点在nodeLayer图层,一堆的edge连线edgeLayer图层

    1K30
    领券