1

我已经使用画布视图方法绘制了饼图,但现在我想点击单个饼图?我怎么能点那个?在此处输入图像描述

4

3 回答 3

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


}
于 2013-07-09T04:53:17.133 回答
0

你能做的是,

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

  • 您将分别通过 event.getX() 和 event.getY() 获得点击的 x 和 y 坐标。

  • 确定这个 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;
    }
于 2013-07-04T12:39:31.227 回答
0

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

您可以执行以下操作:

  1. 在视图的点击处理程序中,确定点击的 xy 坐标
  2. 比较您编写的绘图代码,从而确定点击是在哪一块饼中
于 2013-07-04T12:40:20.200 回答