如何在长按后拖放完成后再次按下按钮?

时间:2013-09-28 06:34:29

标签: android button drag-and-drop listener

你是怎么做到的?

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

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

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

在Oncreate()

  1. 初步了解我的观点。

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

  3. 添加一个longclick和一个普通的点击监听器。

    3.1在longclick上,将touchlistener添加到按钮并添加           ondraglistener的意见。

    3.1.1拖放后,按钮应该再次能够听到咔嗒声。 (你怎么能           这样做?

  4. 感谢你的帮助。我被卡住了。

    这是我的代码。

    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);
    
    }
    

    }

1 个答案:

答案 0 :(得分:0)

只需使用此

 checkIn.setOnLongClickListener(new View.OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {

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

            return true;
        }
    });