我創建了一個擴展popupwindow的類。它的構造看起來像下面Android Click Click PopupWindow
super(builder.context.get());
this.setWindowLayoutMode(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
setFocusable(true);
setBackgroundDrawable(new BitmapDrawable());
setTouchInterceptor(onTouchListener);
FrameLayout frameLayout = new FrameLayout(builder.context.get());
LayoutInflater inflater = (LayoutInflater) builder.context.get().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
View overlayBase = inflater.inflate(R.layout.tutorial_view_items, null, false);
frameLayout.addView(builder.backgroundView);
frameLayout.addView(overlayBase);
setContentView(frameLayout);
的onTouchListener如下所示:
private OnTouchListener onTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
Log.d(TAG, "Received");
if (Math.pow(x - coordinates[0], 2) + Math.pow((y - coordinates[1]), 2) < Math.pow(radius, 2)) {
Log.d(TAG, "bubbled through");
return false;
}
return true;
}
};
實際顯示popupwindow,我叫SomePopupWindow.showAtLocation(SomeActivity.getWindow().getDecorView().getRootView(), Gravity.CENTER, 0, 0);
可視表示,這裏是有問題的產品
touchListener正在響應,但輸入不會被髮送到基礎活動或彈出窗口? (該按鈕沒有響應,就好像我要刪除ontouchlistener一樣,按鈕工作正常)。
更新 設置觸摸偵聽到的FrameLayout(在這種情況下,即popupwindow的內容視圖),而不是popupwindow本身允許我點擊在彈出定義的按鈕。還在尋找方法來觸摸事件委託給底層活動/圖
SOLUTION
註冊爲Popupwindow觸摸攔截。如果您希望該活動處理該活動,則假設您有該活動的參考,請撥打someActivity.dispatchTouchEvent(someMotionEventPassedIntoTheTouchIntercepter);
,如果您希望該彈出窗口處理該觸摸,請撥打someView.dispatchTouchEvent(theMotionEventPassedToTouchInterceptor)
至彈出窗口的內容視圖,如在彈出窗口setContentView(someView)
方法中設置的。
我的方法具體看起來像下面
private OnTouchListener onTouchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
float x = event.getX();
float y = event.getY();
if (Math.pow(x - coordinates[0], 2) + Math.pow((y - coordinates[1]), 2) < Math.pow(
radius, 2)) {
activity.get().dispatchTouchEvent(event);
return false;
}
frameLayout.dispatchTouchEvent(event);
return true;
}
};
你能否澄清是否「鼓入」實際上是被你期望落空彈出的點擊記錄? – NameSpace
是的,對於混淆抱歉。 ontouchlistener被調用,並且根據我觸摸的位置(即,當我在圓圈區域中觸摸時「冒泡」),Log輸出相應地跟隨 – rperryng
然後不確定。如果您需要黑客解決方案,可以檢查觸摸是否在按鈕的xy座標中並執行performClick()。或者,也可以將觸摸明確地傳遞給包含按鈕的Activity/View的onTouch。希望有人能給你一個更好的答案。 – NameSpace