Notice
Recent Posts
Recent Comments
올해는 머신러닝이다.
[펌]Sliding Toggle 버튼 만들기 본문
출처 :
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
02.
xmlns:android
=
"http://schemas.android.com/apk/res/android"
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에 저것만 쓰셔도 나올겁니다.
스샷은 제가 사용한 이미지가 공개하면 좀 애매해서...
생략하도록하겠습니다. 써보신분들이 후기 올려주시면 감사하겠습니다
'Android > Tip&Tech' 카테고리의 다른 글
Android: how to create transparent or opeque background (0) | 2011.12.22 |
---|---|
Fragment animation 정의하기 팁#1 (0) | 2011.12.21 |
java android 명명규칙 및 일반규칙 (0) | 2011.12.09 |
[펌]안드로이드 로딩화면 추천 구축방법 (0) | 2011.12.08 |
[출처]안드로이드 태스크,어피니티,플래그 (0) | 2011.12.07 |