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

+ Recent posts