안녕하세요 그냥가자입니다.

오늘 만들어볼 것은 (무슨 오늘의 요리 삘이네요..) Sliding Toggle 버튼입니다.
토글버튼으로 만들면 드래그 효과가 안나죠?
그렇다고 그냥 직접 끌고 다니게 만들자니 코딩량이 만만찮습니다.

전 언제나 짧고 간단하게 만듭니다. 귀찮거든요 ㅡㅡㅋ

그럼 시작해보겠습니다.

SlideButton.java

public class SlideButton extends SlidingDrawer implements Checkable, 
 OnDrawerOpenListener, OnDrawerCloseListener{
 int mButtonResource = 0;
 OnCheckChangedListner mOnCheckChangedListner;
 public SlideButton(Context context, AttributeSet attr){
  super(context, attr);
  
  setOnDrawerOpenListener(this);
  setOnDrawerCloseListener(this);
 }
 
 
 @Override
 public boolean isChecked() {
  // TODO Auto-generated method stub
  return !isOpened();
 }
 
 @Override
 public void setChecked(boolean checked) {
  // TODO Auto-generated method stub
  if(!isOpened() != checked){
   if(checked){
    this.animateClose();
   }else{
    this.animateOpen();
   }
  }
    
 }
 
 @Override
 public void toggle() {
  // TODO Auto-generated method stub
  if(!isOpened()){
   this.animateOpen();
  }else{
   this.animateClose();
  }
  
 }
  
 public interface OnCheckChangedListner{
  public void onCheckChanged(View v, boolean isChecked);
 }
 
 @Override
 public void onDrawerOpened() {
  // TODO Auto-generated method stub
  if(mOnCheckChangedListner != null){
   mOnCheckChangedListner.onCheckChanged(this, isChecked());
  }
 }

 @Override
 public void onDrawerClosed() {
  // TODO Auto-generated method stub
  if(mOnCheckChangedListner != null){
   mOnCheckChangedListner.onCheckChanged(this, isChecked());
  }
 }
 public OnCheckChangedListner getOnCheckChangedListner() {
  return mOnCheckChangedListner;
 }

 public void setOnCheckChangedListner(
   OnCheckChangedListner onCheckChangedListner) {
  this.mOnCheckChangedListner = onCheckChangedListner;
 }
}



뭐 딴거 없구요... SlidingDrawer를 상속받아서 했다는게 잴큰 특징 되겠습니다.
그리고 Checkable을 구현한건 CompoundButton (라디오버튼 같은 넘들) 처럼 붙일려고 한겁니다.


slide_button.xml

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
>
 <a.b.c.SlideButton
  android:layout_width="112px"
  android:layout_height="48px"
  android:content="@+id/slideContentLayout"
  android:handle="@+id/slideHandle"
  android:background="@drawable/sns_toggle_btn_bg"
  android:orientation="horizontal"
  android:id="@+id/slideButton"
  
 >
  <Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:id="@+id/slideHandle"
   android:background="@drawable/sns_toggle_btn_bar"
  >
  </Button>
  <LinearLayout
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:layout_weight = "1"
   android:background="#00000000"
   android:id="@+id/slideContentLayout"
  >
  </LinearLayout>
 </a.b.c.SlideButton>
</LinearLayout>


버튼과 배경이 중요한데요...
배경은 On/Off을 하나로 가지고 있고
버튼으로 한쪽을 가리는 형태로 만드시면됩니다.
버튼이 길이가 1이라면 배경은 길이가 2정도 되겠죠


MainActivity.java

requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.slide_button);
        sb = (SlideButton)findViewById(R.id.slideButton);
        
        
        sb.setOnCheckChangedListner(new SlideButton.OnCheckChangedListner() {
   
   @Override
   public void onCheckChanged(View v, boolean isChecked) {
    // TODO Auto-generated method stub
    Log.i("aaa","bbb");
    Toast t = Toast.makeText(context, Boolean.toString(isChecked), Toast.LENGTH_LONG);
    t.show();
   }
  });


이부분은 onCreate의 일부인데요... 그냥 onCreate에 저것만 쓰셔도 나올겁니다.

스샷은 제가 사용한 이미지가 공개하면 좀 애매해서...
생략하도록하겠습니다. 써보신분들이 후기 올려주시면 감사하겠습니다.