如何获得画布区域点击?

时间:2013-07-04 12:07:28

标签: android view charts pie-chart

我使用画布方法绘制了饼图,但现在我想点击个别馅饼?我该怎么做?enter image description here

3 个答案:

答案 0 :(得分:3)

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

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

@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);


}

答案 1 :(得分:0)

你能做的是,

  • 覆盖onTouch事件&您将获得Motion事件,

  • 你会得到x& y由event.getX()&的点击进行协调。        event.getY()。

  • 确定此x& y在饼中相交。

示例代码:

1)简单的

public boolean onTouchEvent(MotionEvent event) {
        if(event.getAction()==MotionEvent.ACTION_UP){
        float xCord=event.getX();
        float yCord = event.getY();
        ....
        Write condition to identify where this x & y intersect in pie.
        ...
    }
    return true;
}

2)获得触摸的另一种方式(好方法)

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;
    }

答案 2 :(得分:0)

你做不到。好吧,至少不是直接的。

您可以执行以下操作:

  1. 在视图的单击处理程序中,确定单击的xy坐标
  2. 比较您编写的绘图代码,从而确定点击的哪个部分