2012-11-26 69 views
-1

對不起,如果這太基礎。 我創建一個擴展的新類按鈕:創建自定義按鈕

public class MyButton extends Button { 
    public static final int STATUS_OFF = 0; 
    public static final int STATUS_PLAY1 = 1; 
    public static final int STATUS_PLAY2 = 2; 
    public static final int STATUS_PLAY3 = 3; 

    public int status; 

    private Context ctx; 

    public MyButton(Context context) { 
     super(context); 

     ctx = context; 
     status = STATUS_OFF; 
     super.setBackgroundResource(R.drawable.sound_button_off); 
    } 

    private void click() { 
     switch (status) { 
      case STATUS_OFF: 
       status = STATUS_PLAY1; 
       break; 
      case STATUS_PLAY1: 
       status = STATUS_PLAY2; 
       break; 
      case STATUS_PLAY2: 
       status = STATUS_OFF; 
       break; 
      case STATUS_PLAY3: 
       break; 
     } 
     // OTHER THINGS TO DO 
    } 
} 

在我的主要活動:

public class MyActivity extends Activity { 
    private static final int HORIZ = 16; 
    private MyButton[] b = new MyButton[HORIZ]; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_rhythm); 

      createButtons(); 
    } 

    private void createButtons() { 
    LinearLayout layout = (LinearLayout)findViewById(R.id.layout_main_linear); 
    for (int w=0; w<HORIZ; w++) { 
     b[w] = new MyButton(MyActivity.this); 
     LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     layout.addView(b[w], p); 
     b[w].setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

       // HELP ME HERE 
      // WHEN CLICKING THIS BUTTON, IT AUTOMATICALLY SHOULD RUN the private method click(); 
      // IT IS PRIVATE AND SHOULD NOT BE RUN FROM HERE, BUT AUTOMATICALLY EACH TIME THE BUTTON IS CLICKED. 

      } 
     }); 
    } 
    } 
} 

怎樣才能使人們有可能的是,當我setOnClickListener()從我的主類,點擊()方法被自動調用? 換句話說,這個按鈕應該像其他任何按鈕一樣,但是點擊時可以做更多的事情。 謝謝。

+1

無法得到你想要達到的效果。 –

+0

我省略了很多代碼來簡化它,結果證明它並不清楚。 在MainActivity中我有: private MyButton b = new MyButton(); (...) b.setOnClickListener(新View.onClickListerner(){ 公共無效的onClick(視圖v){// 一些代碼 } }); 單擊b時,我只想在執行private click()方法後才運行「某些代碼」。特別是,單擊()將旋轉背景,播放聲音並更改一些狀態變量。這些操作應該在b中完成,而不是在MainActivity的setOnClickListener中執行。 我希望現在已經清楚。 –

回答

0
https://github.com/johannilsson/android-actionbar/ 

這是選擇的代碼:這將是ü有用,將此文件命名,並把這個XML繪製文件夾,並設置UR按鈕的背景,這個文件名...

<?xml version="1.0" encoding="utf-8"?> 

    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 

     <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/focused" /> 

     <item android:state_focused="true" android:state_pressed="true" android:drawable="@drawable/focusedpressed" /> 

     <item android:state_focused="false" android:state_pressed="true" android:drawable="@drawable/pressed" /> 

     <item android:drawable="@drawable/defaultbutton" /> 

    </selector> 
+0

感謝您的回答。對不起,我不清楚。在click()方法中,我需要做很多事情,動態地改變它是其中的背景。當onClick()被觸發時,我需要click()來運行。換句話說,這個按鈕應該像任何其他按鈕一樣,但是單擊時也執行click()方法。 –

+0

http://samir-mangroliya.blogspot.in/2012/11/android-custom-button-example.html –

+0

https://www.dropbox.com/s/2h1vfze2a5zkyug/Android%20Custom%20Buttons.rar http: //android.programmerguru.com/android-custom-toast-example/ –