2013-09-28 101 views
0

你是如何做到這一點的?如何在短暫點擊完成拖放操作後再次點擊按鈕時再次監聽?

我有一個按鈕。該按鈕有一個longclicklistener和一個clicklistener。在longclick監聽器內部,它具有拖放功能。

我試圖做到這一點..然而,經過長時間的點擊和拖放已經是成功的..按鈕,可以不再檢測短期和長期點擊,因爲它是在股票的拖放。你做這種邏輯有更好的設計嗎?謝謝。你怎麼能讓按鈕在拖放後聽點擊?

這就是我所做的。我希望我的程序在後臺運行,所以我確實使用了服務。

在OnCreate()

  1. 初始化我的視圖。

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

  3. 添加一個長按和一個正常的點擊監聽器。

    3.1在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); 

} 

}

+0

您可以在拖放完成後移除偵聽器。郵政編碼,以便您可以得到更準確的答案。 –

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

我注意到你使用return true而不是false。那個布爾返回值有什麼用處嗎? –

+0

@ toksis..yes,當你點擊長按聽者時,你的簡單按鈕點擊監聽器將不會被調用。 – FarhaSameer786

+0

@ toksis只是使用,你會看到不同 – FarhaSameer786

相關問題