java - linearlayout - android studio layout design



كشف لفتة قذف فوق العناصر القابلة للنقر (1)

إحدى الطرق التي حققتها هي تجاوز الطريقة التالية:

public boolean onInterceptTouchEvent(MotionEvent event){
    super.onInterceptTouchEvent(event);
    ...

يمكنك تجاوز هذه الطريقة في حاوية التخطيط الخاصة بك (على سبيل المثال فيوغروب، أو أيا كان كنت عقد الأزرار مع) والاستمرار في العودة false منه من أجل "اعتراض" التي تعمل باللمس الأحداث التي يتم استهلاكها من قبل الأطفال View s (أي الأزرار الخاصة بك ). ضمن هذا الأسلوب تجاوز يمكنك ثم استدعاء كاشف فتة كاشف مع MotionEvent s. هذه الطريقة أيضا "يرى" الأحداث التي تستهدف مجموعة ViewGroup نفسها أيضا، مما يعني - إذا كنت أتذكر بشكل صحيح - سوف تحتاج فقط إلى استدعاء كاشف فتة الخاص بك من داخل هذه الطريقة، وبذلك فإن كاشف لفتة 'رؤية' جميع الأحداث ، بغض النظر عن ما إذا كان''er على الأزرار أم لا. حتى إذا قمت بسحب إصبعك بدءا من زر ثم تنتهي عند نقطة ما على خلفية تخطيط، يجب أن كاشف لفتة نرى انتقاد كامل. أنت لن تحتاج إلى إطعام كاشف لفتة مع الأحداث من onTouchEvent() تخطيط الخاصة onTouchEvent() لأنها سوف رأيت بالفعل لهم.

الطريقة الثانية:

نظرت للتو في مشروعي حيث استخدمت هذا، وأدركت أنني تحولت إلى طريقة مختلفة للقيام بذلك. ما فعلته فعليا هو أنني صممت كل من طفلي View s بحيث أن Activity الرئيسي (أو يحتوي على ViewGroup ) يمكن تسجيل نفس كاشف لفتة مع كل من هؤلاء الأطفال View s (كل من بلدي View خاص لديها طريقة تسمى registerGestureDetector() ). ثم، في تجاوز 'أونتوشيفنت ()' في طفلي View s، وأنا اجتياز MotionEvent s للكشف عن لفتة التي تم تسجيلها مع هذا MotionEvent . وبعبارة أخرى، تخطيط ViewGroup الأصل وجميع الطفل View الصورة ببساطة تبادل نفس كاشف فتة.

وأنا أدرك أن هذا قد يبدو وكأنه قليلا من المتاعب وليس من الضروري النظر في أنه يمكن القيام به باستخدام onInterceptTouchEvent() ، ولكن طلبي يتعامل مع بعض القواعد المعقدة جدا بشأن كيفية بلدي View الحاجة إلى الاستجابة للمس الأحداث والإيماءات، وسمح لي لتطبيق بعض المنطق الإضافي الذي كنت بحاجة محددة لتطبيقي. ومع ذلك، فإن كلا من هذه الأساليب لقد استخدمت تحقيق نفس الهدف الأساسي هنا: لتوجيه MotionEvent الصورة التي استهدفت مختلف View الصورة لنفس الكائن لفتة كاشف.

تخيل تخطيط مع 4 أزرار

 _______________________________
|              |                |
|      A       |       B        |
|______________|________________|
|              |                |
|      C       |       D        |
|______________|________________|

أود الكشف عن لفتة قذف على تخطيط كامل ولكن عندما يبدأ القذف فوق زر لم يتم الكشف عنها.

أنا استخدم:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    gesturedetector= new GestureDetector(this, this);

    findViewById(R.id.touchContainer).setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Log.e("","TouchEvent");
            return gesturedetector.onTouchEvent(event);
        }
    });
}

عندما لا يكون هناك عناصر قابلة للنقر ولكن يفشل إذا بدأ قذف فوق عنصر قابل للنقر.

كيف يمكنني حل ذلك؟ تقدم مكافأة من 50 نقطة لإجابة العمل كاملة





android-resources