2016-09-26 7 views
0

Ich versuche eine Methode zu erstellen, die als ColorStateList oder Selector fungiert, wenn eine Ansicht gedrückt wird. Wenn eine Ansicht in die Methode onClickColorSelector übergeben wird, nimmt sie die Ansicht und setzt eine setOnTouchListener, so dass, wenn der Benutzer auf eine view drückt, die Ansicht einen Selektor-Effekt bekommt.onTouchListener funktioniert nur beim zweiten Drücken

Nun das Problem ist, dass onTouchListener nur aufgerufen wird, wenn eine Ansicht zum zweiten Mal angeklickt wird. Warum verhält es sich so und wie löst man es?

Hinweis! Bitte nicht mich ColorStateList vorschlagen!

onClickColorSelector ist in einer Klasse namens 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; 
     } 
    }); 
} 

Dies ist, wie onClickColorSelector(); aus einer anderen Klasse aufgerufen:

ViewSelector vs = new ViewSelector(this); 

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

      vs.onClickColorSelector(loginBtn, Color.RED); 


     } 
    }); 
+1

Aufruf dieses 'vs.onClickColorSelector (loginBtn, Color.RED);' im 'OnCreate()' Methode ...... – sushildlh

+0

@sushildlh Es war die Antwort! Haha ist so lustig, wenn so ein kleines Ding verpasst wird! schreibe es als Antwort bitte – Muddz

Antwort

1

Es ist aktiviert, wenn Sie die Taste drücken. ..

Das ist die Grund ist es 2. Mal in Folge ....

diese So rufen vs.onClickColorSelector(loginBtn, Color.RED); in Ihrem OnCreate() Methode

+0

Irgendwelche Vorschläge, warum dieser Code View.OnClick nicht mehr funktioniert? – Muddz

+0

Ich denke, Sie haben bereits OnTouch Listener auf dem Button .... haben Sie auf dieser http://StackOverflow.com/A/19539206/5305430 – sushildlh

+1

Ich löste es durch Festlegen von 'view.callOnClick();' in diesem Aufruf '(motionEvent.getAction() == MotionEvent.ACTION_UP) {}' – Muddz

Verwandte Themen