2016-09-26 2 views
0

보기를 누를 때 ColorStateList 또는 선택기 역할을하는 메소드를 만들려고합니다. 보기가 메소드 onClickColorSelector 에 전달되면보기가 표시되고 setOnTouchListener으로 설정되므로 사용자가 view을 누르면보기는 선택기 효과를 얻습니다.onTouchListener는 두 번째로 눌렀을 때만 작동합니다.

이제 문제는 onTouchListener이보기를 두 번째로 클릭 할 때만 호출된다는 것입니다. 왜 그렇게 행동하고 어떻게 해결할 수 있습니까?

참고! 나에게 ColorStateList 제안하지 말아라!

onClickColorSelector 이것은 onClickColorSelector();는 다른 클래스에서 호출하는 방법입니다 ViewSelector

public void onClickColorSelector(View view, final int onPressColor) { 

    Log.d("TAG" , "1"); 
    view.setOnTouchListener(new View.OnTouchListener() { 
     int defaultTextColor = 0; 

     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
      if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
       Log.d("TAG" , "2"); 
       if (view instanceof TextView) { 
        Log.d("TAG" , "3"); 
        defaultTextColor = ((TextView) view).getCurrentTextColor(); 
        ((TextView) view).setTextColor(onPressColor); 
       } 
       Log.d("TAG" , "4"); 
        view.getBackground().setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP); 
       return true; 

      } else if (motionEvent.getAction() == MotionEvent.ACTION_UP) { 

       if (view instanceof TextView) { 

        ((TextView) view).setTextColor(defaultTextColor); 
       } 

        view.getBackground().setColorFilter(null); 


       return true; 
      } 

      return false; 
     } 
    }); 
} 

라는 클래스에 있습니다

ViewSelector vs = new ViewSelector(this); 

     loginBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      vs.onClickColorSelector(loginBtn, Color.RED); 


     } 
    }); 
+1

호출이'vs.onClickColorSelector (loginBtn, Color.RED) 당신의 OnCreate() 방법이 vs.onClickColorSelector(loginBtn, Color.RED); 전화 ...... – sushildlh

+0

@sushildlh 그 대답이었다! 하하는 그렇게 작은 것이 놓칠 때 우습다! 답변으로 작성하십시오 – Muddz

답변

1

그것은 당신이 버튼을 누를 때 활성화됩니다. ..

당신`에서 OnCreate()`방법`, 그것은 2 시간을 실행하는 이유 ....

그래서

+0

이 코드가 왜 표시되는지에 대한 제안. 더 이상 작동하지 않으려면 클릭하십시오. – Muddz

+0

버튼에 OnTouch 리스너가 이미 있다고 생각합니다. 이걸보세요. http://stackoverflow.com/a/19539206/5305430 – sushildlh

+1

이 호출의 경우'view.callOnClick();'을 설정하여 해결했습니다. '(motionEvent.getAction() == MotionEvent.ACTION_UP) {}' – Muddz

관련 문제