我有一个自定义视图,我想知道是否有任何chace,我可以检测,如果我的视图以外的东西被点击。它必须在View类中,否则它不能按我的意图工作!检测视图之外的触摸
的onTouchEvent(所以你知道我做了什么)
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
selected = null;
invalidate();
return true;
}
double deltaX = event.getX() - rect.width()/2 - rect.left;
double deltaY = -(event.getY() - rect.height()/2 - rect.top);
double fromMid = Math.sqrt(deltaX * deltaX + deltaY * deltaY);
boolean inCircle = fromMid < (rectSelect.bottom/2);
if (inCircle) {
double angleInDegrees = getPositionOnCircumference(deltaX, deltaY);
float percentage = (float) (angleInDegrees/360f);
float totalPerc = 0;
int index = -1, i = 0;
for (PieChartSlice e : slices) {
if (percentage > totalPerc) {
index = i;
} else if (percentage < totalPerc) {
break;
}
totalPerc += e.getPercentage();
i++;
}
if (index == -1) {
Toast.makeText(getContext(), "ERROR", Toast.LENGTH_LONG).show();
} else {
final PieChartSlice tmp = slices.get(index);
addScaleTask(rect, 500, 0.9f, new Runnable() {
@Override
public void run() {
selected = tmp;
}
});
selected = slices.get(index);
invalidate();
Toast.makeText(getContext(), selected.getName(),
Toast.LENGTH_SHORT).show();
onSliceSelectedListener.onSliceSelected(this, selected);
}
} else {
if (selected != null) {
addScaleTask(rect, 500, 1f, new Runnable() {
@Override
public void run() {
selected = null;
}
});
invalidate();
}
}
return super.onTouchEvent(event);
}
显示一些代码,了解它是如何实现的!为什么它需要在你的View类中? – Carnal 2014-12-01 20:35:37
因为我正在制作一个自定义的PieChart视图,并且我希望当视图离焦的时候饼图确实做不到,但我无法真正解释,但这是拼图的最后一部分。 – 2014-12-01 20:36:32
你使用片段还是活动?您可以将clicklistener(s)实施到不包含您的视图的其他视图。并让这些clicklistener(s)在你的View中运行一个方法。 – Carnal 2014-12-01 20:40:18