我有一個自定義視圖,我想知道是否有任何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