2016-08-12 36 views
0

我已經創建了浮動佈局,其中包含向上,向下,向左,向右四個圖像按鈕。我可以訪問(移動)佈局,但我無法在這四個圖像按鈕上設置onclicklistener。將偵聽器設置爲浮動圖像按鈕?

這裏是我的代碼:

XML:

<ImageButton 
    android:id="@+id/down" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignLeft="@+id/up" 
    android:layout_below="@+id/left" 
    android:src="@drawable/ic_keyboard_arrow_down_black_24dp" /> 

<ImageButton 
    android:id="@+id/right" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/down" 
    android:layout_toRightOf="@+id/down" 
    android:src="@drawable/ic_keyboard_arrow_right_black_24dp" /> 

    <ImageButton 
    android:id="@+id/left" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/up" 
    android:layout_marginTop="20dp" 
    android:layout_toLeftOf="@+id/down" 
    android:src="@drawable/ic_keyboard_arrow_left_black_24dp" /> 

    <ImageButton 
    android:id="@+id/up" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="91dp" 
    android:src="@drawable/ic_keyboard_arrow_up_black_24dp" /> 

Java代碼:

public class FloatingWindow extends Service { 
    WindowManager wm; 
    RelativeLayout mInview; 


    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     // TODO Auto-generated method stub 
     super.onCreate(); 


     wm = (WindowManager) getSystemService(WINDOW_SERVICE); 
     LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); 
     mInview = (RelativeLayout)inflater.inflate(R.layout.prac, null, false); 


     RelativeLayout.LayoutParams layoutParameteres = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.WRAP_CONTENT, 700); 


     final WindowManager.LayoutParams parameters = new WindowManager.LayoutParams(
       600, 400, WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSLUCENT); 

     parameters.gravity = Gravity.CENTER | Gravity.CENTER; 
     parameters.x = 0; 
     parameters.y = 0; 



     Button  stop = new Button(this); 
    stop.setText("Stop"); 
     ViewGroup.LayoutParams btnParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
     stop.setLayoutParams(btnParameters); 

    mInview.addView(stop); 

     wm.addView(mInview, parameters); 




     mInview.setOnTouchListener(new View.OnTouchListener() { 

     WindowManager.LayoutParams updatedParameters = parameters; 
      double x; 
      double y; 
      double pressedX; 
      double pressedY; 

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

       switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 

         x = updatedParameters.x; 
         y = updatedParameters.y; 



         pressedX = event.getRawX(); 
         pressedY = event.getRawY(); 

         break; 

        case MotionEvent.ACTION_MOVE: 
         updatedParameters.x = (int) (x + (event.getRawX() - pressedX)); 
         updatedParameters.y = (int) (y + (event.getRawY() - pressedY)); 

         wm.updateViewLayout(mInview, updatedParameters); 

        default: 
         break; 
       } 

       return false; 
      } 
     }); 

    stop.setOnClickListener(new View.OnClickListener() { 
     @Override 
      public void onClick(View v) { 
       wm.removeView(mInview); 
       stopSelf(); 
       System.exit(0); 
      } 
     }); 
    } 



    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     stopSelf(); 
    } 

} 
+0

你爲什麼要擴展'服務'?你可以在'Dialog'中做同樣的佈局嗎? –

+0

不,因爲我想創建將出現在屏幕上的浮動遊戲杆,即使用戶點擊home按鈕它需要在屏幕上。 – Abhishek

回答

0
public class FloatingWindow extends Service { 

    ... 

    @Override 
    public void onCreate() { 

     ... 

     mInview.findViewById(R.id.left).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ... 
      } 
     }); 

     mInview.findViewById(R.id.down).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ... 
      } 
     }); 

     mInview.findViewById(R.id.right).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ... 
      } 
     }); 

     mInview.findViewById(R.id.up).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       ... 
      } 
     }); 

     ... 
    } 
} 
+0

感謝它的工作 – Abhishek

+0

這很好。請標記接受的答案 – nshmura

0

要麼你可以在每個ImageButton使用setOnClickListener方法(如其他規定解決方案),或者你可以讓你的課程從實施並處理onClick方法中任何視圖的click事件的邏輯,如下所示。

public class FloatingWindow extends Service implements View.OnClickListener{ 

    // ...... all other stuff 

    // handle onClick event for any view of the layout 
    @Override 
    public void onClick(View v) { 

     switch (v.getId()) { 

      case R.id.down: { 
       // do something id down click 
       break; 
      } 
      case R.id.right: { 
       // do something if right click 
       break; 
      } 
      case R.id.left: { 
       // do something if left click 
       break; 
      } 
      case R.id.up: { 
       // do something if up click 
       break; 
      } 
      default: // do nothing 
       break; 

     } 
    } 

}