출처 :  http://www.androidpub.com/878847 
안녕하세요 그냥가자입니다.

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

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

그럼 시작해보겠습니다.

SlideButton.java

01.public class SlideButton extends SlidingDrawer implements Checkable,
02.OnDrawerOpenListener, OnDrawerCloseListener{
03.int mButtonResource = 0;
04.OnCheckChangedListner mOnCheckChangedListner;
05.public SlideButton(Context context, AttributeSet attr){
06.super(context, attr);
07. 
08.setOnDrawerOpenListener(this);
09.setOnDrawerCloseListener(this);
10.}
11. 
12. 
13.@Override
14.public boolean isChecked() {
15.// TODO Auto-generated method stub
16.return !isOpened();
17.}
18. 
19.@Override
20.public void setChecked(boolean checked) {
21.// TODO Auto-generated method stub
22.if(!isOpened() != checked){
23.if(checked){
24.this.animateClose();
25.}else{
26.this.animateOpen();
27.}
28.}
29. 
30.}
31. 
32.@Override
33.public void toggle() {
34.// TODO Auto-generated method stub
35.if(!isOpened()){
36.this.animateOpen();
37.}else{
38.this.animateClose();
39.}
40. 
41.}
42. 
43.public interface OnCheckChangedListner{
44.public void onCheckChanged(View v, boolean isChecked);
45.}
46. 
47.@Override
48.public void onDrawerOpened() {
49.// TODO Auto-generated method stub
50.if(mOnCheckChangedListner != null){
51.mOnCheckChangedListner.onCheckChanged(this, isChecked());
52.}
53.}
54. 
55.@Override
56.public void onDrawerClosed() {
57.// TODO Auto-generated method stub
58.if(mOnCheckChangedListner != null){
59.mOnCheckChangedListner.onCheckChanged(this, isChecked());
60.}
61.}
62.public OnCheckChangedListner getOnCheckChangedListner() {
63.return mOnCheckChangedListner;
64.}
65. 
66.public void setOnCheckChangedListner(
67.OnCheckChangedListner onCheckChangedListner) {
68.this.mOnCheckChangedListner = onCheckChangedListner;
69.}
70.}



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


slide_button.xml

01.<LinearLayout
03.android:layout_width="wrap_content"
04.android:layout_height="wrap_content"
05.>
06.<a.b.c.SlideButton
07.android:layout_width="112px"
08.android:layout_height="48px"
09.android:content="@+id/slideContentLayout"
10.android:handle="@+id/slideHandle"
11.android:background="@drawable/sns_toggle_btn_bg"
12.android:orientation="horizontal"
13.android:id="@+id/slideButton"
14. 
15.>
16.<Button
17.android:layout_width="wrap_content"
18.android:layout_height="wrap_content"
19.android:id="@+id/slideHandle"
20.android:background="@drawable/sns_toggle_btn_bar"
21.>
22.</Button>
23.<LinearLayout
24.android:layout_width="fill_parent"
25.android:layout_height="fill_parent"
26.android:layout_weight "1"
27.android:background="#00000000"
28.android:id="@+id/slideContentLayout"
29.>
30.</LinearLayout>
31.</a.b.c.SlideButton>
32.</LinearLayout>


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


MainActivity.java

01.requestWindowFeature(Window.FEATURE_NO_TITLE);
02.setContentView(R.layout.slide_button);
03.sb = (SlideButton)findViewById(R.id.slideButton);
04. 
05. 
06.sb.setOnCheckChangedListner(new SlideButton.OnCheckChangedListner() {
07. 
08.@Override
09.public void onCheckChanged(View v, boolean isChecked) {
10.// TODO Auto-generated method stub
11.Log.i("aaa","bbb");
12.Toast t = Toast.makeText(context, Boolean.toString(isChecked), Toast.LENGTH_LONG);
13.t.show();
14.}
15.});


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

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

+ Recent posts