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

버튼 클릭했을 때 잠깐 색이 바뀌었다가 되돌아오는 것 문제

0 추천

버튼 클릭시 클릭 효과감을 주기위하여

Thread를 사용해서 빨간색으로 약 0.2초정도 바뀌었다가 다시 검정색으로 돌아오는 순간 화면 전환을 하기 위해  코드를 짜려고 합니다. 

그런데 sleep()코드를 넣으니 버튼이 빨간색으로 바뀌지도 않네요.. 

제가 한 방법이 잘못된 것인가요.

 

 

 

MainActivity

//내 정보를 누르면
case R.id.button_myInfo:

    animClass.run();


    intent = new Intent(this,Activity_MyInfo.class);
   // startActivity(intent);

Thread

// 버튼을 클릭했을 때 빨간색으로 바꿔줬다가 다시 검정색으로 바꿔주는 애니메이션
public class ButtonClickAnimation extends  Thread {

    Context context;
    Activity activity;

    RelativeLayout layout;
    LayoutInflater inflater;

    ButtonClickAnimation(Context context, Activity activity){
        this.context = context;
        this.activity = activity;
    }

    public void run(){
        inflater = (LayoutInflater)
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        myInfoButton();

    }
    private void myInfoButton(){
        layout = (RelativeLayout)activity.findViewById(R.id.layout_button_myInfo);
        layout.removeAllViews();
        inflater.inflate(R.layout.button_menu_clicked_myinfo, layout, true);
        Log.d("메시지","빨강으로");
        try {
            sleep(100);
        }catch (Exception e){

        }
        Log.d("메시지","다시 검정색으로");
        layout.removeAllViews();
        inflater.inflate(R.layout.button_menu_unclicked_myinfo, layout, true);
    }

}

 

 

익명사용자 님이 2016년 10월 21일 질문

3개의 답변

0 추천
Thread.sleep() 비동기가 아니기 때문에 화면이 얼어 있게 됩니다. 모바일에서는 권장되는 코드는 아니구요.

selector drawable을 이용하면 버튼의 상태에 따라 다른 배경을 줄 수 있습니다. 개발자 문서나 구글을 통해 검색해 보세요.
spark (226,420 포인트) 님이 2016년 10월 22일 답변
0 추천

보통 버튼의 클릭 이벤트로 배경을 바꿔야 할 경우에는 개인적으로 xml으로 많이 작성합니다.

resource/drawable 폴더 안에 우클릭하고 new -> drawable resource file을 클릭하신 후 xml을 생성할 수 있습니다.

xml 파일 내부에서도 interpolater라는 것을 사용하여 변화되는 값을 조정할 수 있으며, 시간과 색상 모두를 설정할 수 있습니다.

궂이 xml의 interpolater를 사용하지 않겠다고 한다면, 핸들러를 생성한 후에 postdelay를 사용해서 버튼의 배경 색상을 변경하는 방법도 있을 것 같습니다.

new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                button.setBackgroundColor(0xFFFFFF);
            }
        }, 200);

핸들러에 postDelayed를 사용하는 경우에는 정확하게 0.2초 후에 실행되는 것이 아닌, 프로세서 연산 처리에 따라서 가변적일 수 있습니다.

minor (13,710 포인트) 님이 2016년 10월 23일 답변
0 추천
셀렉터 같은걸로 처리하시면 됨

 

위에 답변들처럼 xml 파일 하나 만들고요

 

버튼 클릭됏을때 안됏을때 정의하시고

 

그 xml 파일 자체를 버튼의 백그라운드 옵션으로 주면 됩니다

 

코드로 고민안해도 될 문제시고요.. 원래 다 이렇게 하고 검색해보면 많이나오고 보시면 이렇게 쉬웟어 하실겁니다...
익명사용자 님이 2016년 10월 24일 답변
...