2016-12-28 7 views
0

Expandableリストを作成し、Sliderのように動作するgesturedetectorを設定しました。expandableListViewのonTouchEventListenerを適切に管理します

expListListener= new GestureDetector.SimpleOnGestureListener(){ 

    @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 

       expandableListView.invalidateViews(); 

       Thread closeSliderThread = new Thread(new closingSlider()); 
       Thread openingSliderThread = new Thread(new openingSlider()); 

        if (e1.getX() - e2.getX() < 0 && Math.abs(e2.getX() - e1.getX()) > difference) { 
         closeSliderThread.start();     
         for (int i = 0; i < expandableListView.getCount(); i++)    expandableListView.collapseGroup(i); 

         return true; 
        } 


        if (e2.getX() - e1.getX() > 0 
          && Math.abs(e1.getX() - e2.getX()) > difference) 
        { 

         openingSliderThread.start();                
         return true; 
        } 
        return false; 

      } 



      @Override 
      public boolean onDown(MotionEvent e) { 

       return true; 
      } 

      class closingSlider implements Runnable{ 
       @Override 
       public void run() { 
        rightPartLL.post(new Runnable() { 
         @Override 
         public void run() { 
          synchronized (closingSlider.class) { 
           rightPartLL.startAnimation(hide_slider); 
          } 
         } 
        }); 

       } 
      } 
      class openingSlider implements Runnable{ 
       @Override 
       public void run() { 
        rightPartLL.post(new Runnable() { 
         @Override 
         public void run() { 
          synchronized (openingSlider.class) { 
           rightPartLL.startAnimation(show_slider); 
          } 
         } 
        }); 

       } 
      } 

は、ここに

gestureDetectorOfExpListView = new GestureDetector(activity,expListListener); 

私は私の情事アクションをリッスンするようにexpanableListを伝える:

expandableListView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 

      return gestureDetectorOfExpListView.onTouchEvent(motionEvent); 

     } 


    });enter code here 

をしかし、私がしようとしたとき、長いタッチした後にロジックを実装するためにOnItemLongListenerを設定しますExpandableListの子:

expandableListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long id) { 
      if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
       int groupPosition = ExpandableListView.getPackedPositionGroup(id); 
       int childPosition = ExpandableListView.getPackedPositionChild(id); 

       Toast.makeText(activity,"group: "+groupPosition +" child:"+childPosition,5000).show(); 

       // Return true as we are handling the event. 
       return true; 
      } 
      return false; 
     } 
    }); 
enter code here 

...と私は、私は

OnTouchEvent to expandableListView which return return gestureDetectorOfExpListView.onTouchEvent(motionEvent); 

を設定する行を削除するときには、work.Butをdoesnの `t ....正しく動作OnItemLongClickListener!両方のジェスチャーアクションとonLongTouchesも実装する方法を理解するのを手伝ってください。ご協力いただきありがとうございます。

答えて

0

だから私はエレガントな解決策が見つかりました:

xpandableListView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 

      return gestureDetectorOfExpListView.onTouchEvent(motionEvent) | expandableListView.onTouchEvent(motionEvent); 

     } 


    });enter code here 
関連する問題