0

你怎么做到这一点?

我有一个按钮。该按钮有一个 longclicklistener 和一个 clicklistener。在 longclick 侦听器内部,它具有拖放功能。

我试图这样做..但是在长按和拖放之后已经成功了..按钮,无法再检测到短按和长按,因为它是拖放中的存货。你有更好的设计来做这种逻辑吗?谢谢。你怎么能让按钮在拖放后监听点击?

这就是我所做的。我希望我的程序在后台运行,所以我确实使用了 Service。

在 Oncreate()

  1. 初始化我的视图。

  2. 初始化我的按钮(findbyview)。

  3. 添加一个 longclick 和一个普通的单击侦听器。

    3.1 在longclick上,将touchlistener添加到button,并将ondraglistener添加到views。

    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

0

Just use of this

 checkIn.setOnLongClickListener(new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {

            Toast.makeText(HomeSafeActivity.this, "Long preess", Toast.LENGTH_LONG).show();

            return true;
        }
    });
于 2013-09-28T06:39:19.707 回答