마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼을 클릭할때마다 배경색이 바뀌는 커스텀뷰(custom view)

0 추천

 

package com.example.book;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Button;

class myView extends View {

    private static int[] color = {Color.GREEN, Color.YELLOW, Color.YELLOW, Color.BLUE, Color.RED, Color.WHITE};
    private static int index = 0;

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

    public myView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public myView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(color[index]);
        changeBgColor();
        super.onDraw(canvas);
    }
    public void changeBgColor(){
        index = ((index+1) % 5);
    }
}
public class Main4Activity extends Activity {
    private myView customview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main4);

        Button btn = (Button)findViewById(R.id.id_btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                customview = (myView)findViewById(R.id.id_myview);
            }
        });
    }
}

안녕하세요.

버튼을 클릭하면 배경색이 바뀌는 커스텀 뷰를 만들었는데 

클릭할때마다 index가 초기화되서 색이 변하질 않고 있습니다.

전역변수로 사용하기 위해(static)을 붙여주었고

상수화하려고 (fianl)을 붙이면 어떨가 했는데 changeBgcolor(함수)에서 초기화되기때문에

(final)을 붙이면 오류가 뜹니다. 버튼을 클릭해도 index값이 0으로 초기화되지 않고 changeBgcolor함수 내용을 따르게 하는 방법이 있을까요?

개발자가되자! (450 포인트) 님이 2018년 10월 9일 질문

1개의 답변

0 추천
 
채택된 답변
익명사용자 님이 2018년 10월 11일 답변
개발자가되자!님이 2018년 10월 30일 채택됨
...