0

これどうやってやるの?

ボタンがあります。そのボタンには longclicklistener と clicklistener があります。longclick リスナー内には、ドラッグ アンド ドロップ機能があります。

私はこれをやろうとしました..しかし、長いクリックとドラッグアンドドロップの後、すでに成功しています..ボタンは、ドラッグアンドドロップにストックされているため、短いクリックと長いクリックを検出できなくなりました。この種のロジックを実行するためのより良い設計はありますか? ありがとう。ドラッグアンドドロップ後にボタンがクリックをリッスンするようにするにはどうすればよいですか?

これは私がしたことです。プログラムをバックグラウンドで実行したいので、サービスを使用しました。

Oncreate() で

  1. ビューを初期化します。

  2. ボタン (findbyview) を初期化します。

  3. longclick と通常のクリック リスナーを追加します。

    3.1 on longclick で、ボタンに touchlistener を追加し、ビューに ondraglistener を追加します。

    3.1.1 ドラッグ アンド ドロップの後、ボタンは再びクリックをリッスンできるはずです。(どう
    やってこれを行うことができますか?

あなたの助けに感謝します。ハマった。

これは私のコードです。

public class MainPowerAndVolumeService extends Service {


private ViewGroup mView;
private LayoutInflater inflater;
private ImageButton mainButton;
private Button testButton;


@Override
public IBinder
onBind(Intent intent) {
    return null;
}


public void onCreate( ) {
    super.onCreate();


    /*This will make your window or layout to be overlay and of course you can click the buttons*/

    WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                    | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
                    | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT
    );
    Log.d("tok", " Window Manager activated");


    /*This will load the main.xml view through inflate*/
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    Log.d("tok", " Window Manager systemservice");

    inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);



    mView = (ViewGroup) inflater.inflate(R.layout.main, null);


    mainButton =(ImageButton) mView.findViewById(R.id.MainButton);
    mainButton.setOnTouchListener(new MyTouchListener());

    wm.addView(mView,params);
    Log.d("tok", "add mview");

    buttonListener();






}



public void buttonListener(){

    mainButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Toast.makeText(MainPowerAndVolumeService.this,
                    "ImageButton (selector) is clicked!",
                    Toast.LENGTH_SHORT).show();


        }
    });

    mainButton.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {

            mView.findViewById(R.id.topRight).setOnDragListener(new MyDragListener());
            mView.findViewById(R.id.topLeft).setOnDragListener(new MyDragListener());
            mView.findViewById(R.id.bottomRight).setOnDragListener(new MyDragListener());
            mView.findViewById(R.id.bottomLeft).setOnDragListener(new MyDragListener());
            mainButton.setOnTouchListener(new MyTouchListener());

            return false;
        }
    });

}




public void onDestroy(){
    super.onDestroy();
    ((WindowManager) getSystemService(WINDOW_SERVICE)).removeView(mView);

}

}

4

1 に答える 1