2016-01-29 4 views
1

Я создаю небольшое всплывающее окно, как в чате чата facebook.OnTouchListener не отвечает

Пузырь пожары вверх и появляется, но ontouchlistener не реагирует на него

в ontouch событий делает то, что он должен делать, когда я тестировал его, но когда я включил его, это не стреляя

Ниже код, который я использовал для создания макета пузыря и ontouchlistener

public HeadLayer(Context context) { 
    super(context); 

    mContext = context; 
    mFrameLayout = new FrameLayout(mContext); 

    addToWindowManager(); 
} 

private void addToWindowManager() { 
    final WindowManager.LayoutParams myParams = new WindowManager.LayoutParams(
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.WRAP_CONTENT, 
      WindowManager.LayoutParams.TYPE_PHONE, 
      WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, 
      PixelFormat.TRANSLUCENT); 
    myParams.gravity = Gravity.LEFT; 

    mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); 
    mWindowManager.addView(mFrameLayout, myParams); 

    try{ 
     LayoutInflater layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     // Here is the place where you can inject whatever layout you want. 
     View view = layoutInflater.inflate(R.layout.head, mFrameLayout); 

     //for moving the picture on touch and slide 
     headIcon = (ImageView)view.findViewById(R.id.head_icon); 

     headIcon.setOnTouchListener(new View.OnTouchListener() { 
      WindowManager.LayoutParams paramsT = myParams; 
      private int initialX; 
      private int initialY; 
      private float initialTouchX; 
      private float initialTouchY; 
      private long touchStartTime = 0; 

      @Override 
      public boolean onTouch(View v, MotionEvent event) { 

       switch(event.getAction()){ 
        case MotionEvent.ACTION_DOWN: 
         touchStartTime = System.currentTimeMillis(); 
         initialX = myParams.x; 
         initialY = myParams.y; 
         initialTouchX = event.getRawX(); 
         initialTouchY = event.getRawY(); 
         break; 
        case MotionEvent.ACTION_UP: 
         break; 
        case MotionEvent.ACTION_MOVE: 
         myParams.x = initialX + (int) (event.getRawX() - initialTouchX); 
         myParams.y = initialY + (int) (event.getRawY() - initialTouchY); 
         mWindowManager.updateViewLayout(v, myParams); 
         break; 
       } 
       return false; 
      } 
     }); 
    } catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 
+0

вы пробовали проверки с точки останова на ощупь –

+0

Я думаю, что переменные в 'OnTouchListener()' инициализируется при каждом прикосновении случае. Вы пытались изменить переменные 'static' или перейти к внешнему классу? – Kae10

ответ

0

Привет Вы добавили Framelayout первый затем получить ее ребенка с помощью LayoutInflator. Вы должны сначала инициализировать все представления и прослушиватели, а затем добавить их в оконный менеджер.

Проверить эту ссылку: http://www.piwai.info/chatheads-basics/

Вот это ..

Смежные вопросы