Android 如何获得画布区域点击?

Android 如何获得画布区域点击?,android,view,charts,pie-chart,Android,View,Charts,Pie Chart,我已经使用画布视图方法绘制了饼图,但现在我想点击单个饼图?我怎么能把它打点呢 你能做的是 覆盖onTouch事件&您将获得运动事件 您将获得click by事件的x&y坐标。getX()& 分别是event.getY() 确定此x&y在饼图中相交的位置 示例代码: 1) 简单的 2) 另一种联系方式(好方法) 你不能。嗯,至少不是直接的 不过,您可以执行以下操作: 在视图的单击处理程序中,确定单击的xy坐标 比较您编写的图形代码,从而确定单击位于饼图的哪个部分 我得到了这个问题的完美答案:

我已经使用画布视图方法绘制了饼图,但现在我想点击单个饼图?我怎么能把它打点呢

你能做的是

  • 覆盖onTouch事件&您将获得运动事件

  • 您将获得click by事件的x&y坐标。getX()& 分别是event.getY()

  • 确定此x&y在饼图中相交的位置

示例代码:

1) 简单的

2) 另一种联系方式(好方法)


你不能。嗯,至少不是直接的

不过,您可以执行以下操作:

  • 在视图的单击处理程序中,确定单击的xy坐标
  • 比较您编写的图形代码,从而确定单击位于饼图的哪个部分

  • 我得到了这个问题的完美答案:

    获取单击区域的颜色代码,并检查颜色是否与您的颜色代码匹配。这将获得您想要的单击

    @Override
    public boolean onTouchEvent(MotionEvent event) {
    
        float touchX = event.getX();
    
        float touchY = event.getY();
    
        Logger.debug("X-->"+touchX+" Y---->"+touchY);
    
        //get drawing cache of your view
        Bitmap bitmap = getDrawingCache(true);
    
                //Get color code of pixle where you have tap
        int colorCode=bitmap.getPixel((int)touchX,(int)touchY);
    
        if(colorCode == context.getResources().getColor(R.color.pie_blue)) {
            Logger.debug("Color blue");
            onPieClick.onBluePieClick(touchX,touchY);
        }else if(colorCode == context.getResources().getColor(R.color.pie_green)) {
            Logger.debug("Color green");
            onPieClick.onGreenPieClick(touchX,touchY);
        }
    
        return super.onTouchEvent(event);
    
    
    }
    
    OnGestureListener mGestureListener=new GestureDetector.SimpleOnGestureListener(){
            public boolean onSingleTapConfirmed(MotionEvent e) {
                float xCord=e.getX();
                float yCord = e.getY();
                ....
                identify where this x & y intersect in pie.
                ...
            };
        };
    GestureDetector gestureDetector=new GestureDetector(context, mGestureListener);
    public boolean onTouchEvent(MotionEvent event) {
                gestureDetector.onTouchEvent(event);
            return true;
        }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
    
        float touchX = event.getX();
    
        float touchY = event.getY();
    
        Logger.debug("X-->"+touchX+" Y---->"+touchY);
    
        //get drawing cache of your view
        Bitmap bitmap = getDrawingCache(true);
    
                //Get color code of pixle where you have tap
        int colorCode=bitmap.getPixel((int)touchX,(int)touchY);
    
        if(colorCode == context.getResources().getColor(R.color.pie_blue)) {
            Logger.debug("Color blue");
            onPieClick.onBluePieClick(touchX,touchY);
        }else if(colorCode == context.getResources().getColor(R.color.pie_green)) {
            Logger.debug("Color green");
            onPieClick.onGreenPieClick(touchX,touchY);
        }
    
        return super.onTouchEvent(event);
    
    
    }