इसके बजाय शीर्ष लेआउट पर एक GestureListener
स्थापित करने की, आप अपने खुद के वर्ग कि LinearLayout
फैली बनाना चाहिए और यह onTouchEvent
विधि है ओवरराइड करने के लिए। वहाँ आप लंबे क्लिक के तर्क लागू कर सकते हैं \ कम क्लिक आदि
क्लिक ईवेंट पहले विजेट लेआउट के लिए भेजा जाएगा, और केवल अगर यह उन्हें संभाल नहीं करता है (इसलिए यह onTouchEvent
रिटर्न false
है), आप होगा उन्हें शीर्ष लेआउट पर ले जाएं।
संपादित करें:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp" >
<LinearLayout
android:id="@+id/widgetView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_margin="10dp"
android:gravity="center" >
</LinearLayout>
<com.example.touchtesting.MyLinearLayout
android:id="@+id/widgetOverlayFrame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false" >
</com.example.touchtesting.MyLinearLayout>
</FrameLayout>
परिवर्तन अपने पैकेज के नाम के com.example.touchtesting
।
public class MyLinearLayout extends LinearLayout{
public MyLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
private long startClick = 0;
@Override
public boolean onTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
startClick = ev.getEventTime();
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
if (ev.getEventTime() - startClick < 500) {
Log.i("example","short click");
}
else {
Log.i("example","long click");
}
break;
}
return true;
}
}
ठीक है, यह काम करता है पूरी तरह से पहचान ... मैं अब नीचे परत पर क्लिक कैसे पास करूं? – Veljko
मुझे यह कुछ काम कर रहा है ... विचार के लिए tnx! – Veljko