onDraw()는 view가 화면에 보일때 자동으로 호출되는
method로 재정의를 통해 Button의 style을 지정할수있다
invalidate()는 onDraw() method를 호출하면서
Button을 이동한 좌표에 지정된 style을 적용할수있다
activity_main.xml
<!--파일 위치를 불러온다-->
<com.example.myapplication.DemoButton
android:id="@+id/btn"
android:layout_width="250dp"
android:layout_height="100dp"
android:text="button style change"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
dimens.xml
//res\values\dimens.xml
<dimen name="text_size">10sp</dimen>
<!--getResources() method를 이용해 Resource 객채를 얻어오고
Resource 객체에 getDimension() method를 이용해 참조할수있다
setTextSize() method를 이용해 float pixel값으로 return받는다 -->
DemoButton.java
public class DemoButton extends AppCompatButton {
//소스코드에서 new연산자를 이용하여 생성하는경우 사용하는 생성자
public DemoButton(Context context){
super(context);
init(context);
} //생성자 생성
//안드로이드 UI 객체를 생성시에는
//반드시 Context를 인자로 사용한다
//view를 xml layout에 추가하는경우 사용하는 생성자
public DemoButton(Context context, AttributeSet attrs){
super(context, attrs);
init(context);
} //생성자 생성
//AttributeSet을통해 xml에 추가된 속성을 전달 받는다
//초기화를 위한 method
private void init(Context context){
setBackgroundColor(Color.CYAN);
setTextColor(Color.GREEN);
//text size 지정
float size = getResources().getDimension(R.dimen.text_size);
setTextSize(size);
}
//view가 화면에 그려질때 자동으로 호출되는 method
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
Log.d("DemoButton", "onDraw()");
//onDraw호출되는 시점을 출력하기위해
}
//view가 터치될때 호출되는 method
public boolean onTouchEvent(MotionEvent event){
Log.d("DemoButton", "onTouchEvent()");
int action = event.getAction();
switch(action){
case MotionEvent.ACTION_DOWN:
setBackgroundColor(Color.GREEN);
setTextColor(Color.MAGENTA);
break;
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
setBackgroundColor(Color.MAGENTA);
setTextColor(Color.GREEN);
break;
}
invalidate();
//설정된 값으로 다시 그려준다(onDraw() 호출)
return true;
}
}
'android studio' 카테고리의 다른 글
touch event, gesture event (0) | 2019.08.12 |
---|---|
카드뷰(CardView) (0) | 2019.08.12 |
toast message, style (0) | 2019.08.11 |
inflation (0) | 2019.08.11 |
GridView (0) | 2019.08.11 |