onTouchListener仅在第二次按下时才有效

时间:2016-09-26 09:22:55

标签: android

我试图在按下View时创建一个充当ColorStateList或Selector的方法。将视图传递给方法onClickColorSelector时 它会占用视图并设置setOnTouchListener,因此当用户按下view时,视图会获得选择器效果。

现在问题onTouchListener仅在第二次点击视图时调用。为什么它表现得那样以及如何解决它?

注意! 不要建议我使用ColorStateList!

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;
        }
    });
}

这是从另一个类调用onClickColorSelector();的方式:

ViewSelector vs = new ViewSelector(this);

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

            vs.onClickColorSelector(loginBtn, Color.RED);


        }
    });

1 个答案:

答案 0 :(得分:0)

  

按下按钮时激活...

     

这就是它第二次跑的原因......

     

请在您的电话中调用此vs.onClickColorSelector(loginBtn, Color.RED);   OnCreate()方法