2016년 6월 29일 수요일

Android Studio - Custom View 만들기

안드로이드에서 게임을 만들지 않는 한 Custom View를 만드는 일은 그리 흔치 않다고 한다.
그래도 한번 공부 삼아 만들어 보자

직접 클래스 생성을 통한 CustomView 생성


1. View 클래스를 상속 받는 CustomView 생성
2. CustomView 를 Activity에 세팅
3. 이벤트 등록


[View 클래스를 상속 받는 CustomView 생성]

View 클래스를 상속 받는 CustomView를 만들자.
View 클래스를 구현 하려면 3개의 생성자 및 onDraw 메소드를 override 해서 구현해야 한다.

public class CircleView extends View {

    public CircleView(Context context) {
        super(context);
    }

    public CircleView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CircleView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Paint paint = new Paint();
        paint.setColor(Color.BLUE);
        canvas.drawCircle(50, 50, 30, paint);
    }
}



[CustomView 를 Activity에 세팅]

기본적으로 CustomView를 세팅하는 방법을 setContentView() 메소드를 호출하는 것은 똑같다.
기존에 res/layout 의 xml 파일의 R.layout 값을 파라미터로 넘기는것과 달리 CustomView 객체를 생성하여 넘겨준다.

public class CustomViewActivity extends AppCompatActivity {

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.ch07_activity_custom_view);
        CircleView circle = new CircleView(this);
        setContentView(circle);
    }
}


[이벤트 등록]

마우스 클릭 이벤트를 등록 한다면, 아래 코드를 추가하면 된다.
View.onClickListener 클래스를 구현한 객체를 setOnClickListener 메소드를 호출하여 넘겨주면 되는데 다양한 방법 중 아래 방법(익명클래스생성)으로 넘기는게 보편적인 방법이다.

circle.setOnClickListener(new View.OnClickListener(){

    @Override    public void onClick(View v) {
        Log.d(this.getClass().getSimpleName(), "2-5. 리스너 인터페이스 그냥 바로 추가");
    }
});

위 코드는 람다표기법이라고 해서 아래 코드랑 동일하게 동작한다.
JDK 1.8 부터 가능하다고 한다

circle.setOnClickListener( (v) -> {
        Log.d(this.getClass().getSimpleName(), "2-5. 리스너 인터페이스 그냥 바로 추가");
});



직접 클래스 생성을 통한 CustomView 생성


1. View 클래스를 상속 받는 CustomView 생성
2. res/layout 에다가 해당 CustomView 를 사용하도록 xml 파일에 추가
3. CustomView 를 Activity에 세팅

[res/layout 에다가 해당 CustomView 를 사용하도록 xml 파일에 추가]

<mypackage.CircleView    android:id="@+id/circle"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    />

[CustomView 를 Activity에 세팅]

setContentView(R.layout.ch07_activity_custom_view);




댓글 없음:

댓글 쓰기