2011-05-16 3 views
0

기본적으로 두 가지 다른보기가있는 Android 앱에서 사용자 지정 단추를 만들었습니다. 버튼을 누르지 않은 상태의 이미지와 눌렀을 때 사용할 다른 이미지가 있습니다. 다음은 버튼을 구현 한 방법과 사용자가 어떻게 반응하는지입니다.Android - 사용자 지정 단추가 눌려 져서 눌려졌습니다.

private void registerListeners() { 

    calcButton.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      calcButton.requestFocusFromTouch(); 
      calcButton.setImageResource(R.drawable.calc_button_pressed); 
      return false; 
     } 
    }); 

    calcButton.setOnFocusChangeListener(new View.OnFocusChangeListener() { 

     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      calcButton.setImageResource(R.drawable.calc_button_not_pressed); 
     } 
    }); 

    calcButton.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) {   
      mathCalculation(); 
      calcButton.setImageResource(R.drawable.calc_button_not_pressed); 
     } 
    }); 
} 

내 문제는 사용자가 버튼을 터치하고 버튼의 체류를 누름 버튼에서 자신의 그림을 끌 경우 "버그"가 있다는 것입니다. 위에서 구현 한 한 가지 해결 방법은 "setOnFocusChangeListener"이므로 사용자가 일단 다른 항목을 선택하면 다시 팝업됩니다.

사용자가 버튼을 터치하여 그림을 드래그하면 버튼이 튀어 나오게하고 싶습니다.

모든 의견을 크게 높이세요 !!!

감사합니다.

+0

P.s ... 누군가가 행동에서 무슨 일이 일어나고 있는지보고 싶다면 안드로이드 마켓에서 myProfit을 검색하면됩니다. 그것은 팝업 유일한 응용 프로그램이 될 것입니다. – KevinM

답변

4

당신은 그 동작을 얻기 위해 별도의 버튼 클래스를 작성할 필요가 없습니다, 당신이 그릴 수 XML을 통해 구현할 수 있습니다. 당신의 XML이 되세요하고 버튼의 배경으로 설정 :

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" 
     android:drawable="@drawable/calc_button_pressed" /> 
    <item android:drawable="@drawable/calc_button_not_pressed" /> 
</selector> 
+0

흠. 나는 그것을 구현하는 방법을 모른다. 나는 방금 약 한달 전에 안드로이드 용으로 개발하기 시작했고 여전히 배울 점이 많다. drawable xml을 언제 어디서 구현합니까? 그런 멍청한 녀석 인 것에 대해 유감스럽게 생각합니다. – KevinM

+0

OK 사용법을 알아 냈습니다. hdpi 폴더에 drawable xml을 만들었습니다. 나는 그것을 calc_button이라고 불렀고 나는 그것을 "setOnTouchListener"에서 호출했다. 완벽하게 작동했습니다! 그래도 한 가지 질문이 있습니다. mdpi 및 ldpi 폴더에 동일한 드로어 블 XML을 만들어야합니까? – KevinM

+0

헤이 케빈, 다행 했어. http://developer.android.com/guide/topics/resources/localization.html에 따르면'drawable' 리소스 폴더 만이 리소스를 '마술처럼'얻을 수있는 유일한 리소스 폴더이기 때문에 그렇게하지 않아도됩니다. "기본"값을 선언 할 필요없이 다양한 폴더.그렇지 않으면 단지 당신이 만든 XML을'drawable' 폴더에 넣고'drawable-hdpi'에서 제거 할 수 있습니다. 내가 보낸 현지화 링크를 통해 읽으십시오. 다른 리소스 폴더에 configs를 사용하는 이유를 설명합니다. – Gix

1

당신은 사용 onTouch를 사용할 수 호출합니다. 그런 다음 사용자가 터치하면보기 범위 밖으로 이동할 때 발생하는 ACTION_OUTSIDE을 사용합니다.

편집 1 : 구체적으로 :

OnTouchListener(MotionEvent e) { 
    switch(e.getAction()) { 
     case MotionEvent.ACTION_OUTSIDE: // switch the image if the button 
    } 
} 
1

클릭 이벤트가 만지고 경우에만 해제 "일"때문입니다. 만지거나 밖으로 움직이는 경우 클릭이 아닙니다.

StateListDrawable을 사용하려면 원하는대로하십시오.

관련 문제