アップ、ダウン、左、右の4つのイメージボタンを含むフローティングレイアウトを作成しました。私はレイアウトにアクセス(移動)することができますが、私はこれら4つのイメージボタンで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();
}
}
なぜあなたは 'サービス 'を拡張していますか?あなたは 'Dialog'で同じレイアウトをすることができますか? –
いいえ、画面に表示される浮動ジョイスティックを作成したいと思います。ユーザーがホームボタンをクリックしても、画面上に表示する必要があります。 – Abhishek