2017-02-22 24 views
2

을 필요로하는 빨강, 색 변화를 TextView을 들고하는 onLongClickListenerOnClick 이벤트와, 작동하지 않는, 그리고 방출에, 그것의 색깔은 흰색으로 변경하기로되어있다.OnLongCLickListener 내가이 <code>TextView</code>이

문제점 : TextView를 누른 채 동안 외부에 내 손가락을 이동 한 다음 내 손가락을 떠날 때 , 그 색이 흰색으로 변경되지 않습니다.

XML

<TextView 
    android:layout_width="match_parent" 
    android:text="hello" 
    android:textColor="#ffff" 
    android:id="@+id/timer" 
    android:layout_height="wrap_content" 
    /> 

자바

final TextView t1 = (TextView) findViewById(R.id.timer); 
    t1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      t1.setTextColor(Color.WHITE); 

     } 
    }); 
    t1.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      t1.setTextColor(Color.RED); 
      return false; 
     } 
    }); 
+0

당신이 당신의 onLongClick에 진정한 복귀 시도가()를 :

final TextView t1 = (TextView) findViewById(R.id.timer); t1.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: t1.setTextColor(Color.RED); break; case MotionEvent.ACTION_UP: t1.setTextColor(Color.WHITE); break; } return true; } }); 
dave

+0

OnTouchListener를 사용하여 원하는 기능을 수행하십시오. –

+0

@Abhishec Kumar 내 대답은 문제를 해결하는 데 도움이됩니다.^_^물어 볼 수있는 내용을 정리해야 할 경우 –

답변

2

View.OnClickListener - 뷰가 을 클릭 할 때 콜백에 대한 인터페이스 정의를 호출합니다. View.OnLongClickListener -보기가 일 때 호출 될 콜백에 대한 인터페이스 정의을 보유했습니다.

그래서 당신이 말한 것은 100 % 사실입니다. 그것은 당신의 방식대로 클릭되고 개최 되었기 때문에 빨간색이어야합니다.

하지만 난 텍스트보기를 누른 손가락을두고 다음 누른 상태에서 텍스트보기 외부에 내 손가락을 이동하면, 그렇지 흰색 흰색

당신이 준 색상으로 색상을 변경 클릭 만하면 텍스트보기로! 당신은 (클릭 및 보유하는 경우) 당신이 말했듯이 흰색을 얻고 싶은 경우에, 당신은 당신이 당신의 견해 터치 감지 및 배출과 관련된 색상을 변경하려면 지점에 OnLongClickListener

에 흰색 색상을 설정해야 터치 이벤트가이보기에 파견 될 때 호출되는 콜백에 대한 인터페이스 정의 - 그 다음은 OnTouchListener 대신 clickListeners

View.OnTouchListener를 사용해야합니다. 터치 이벤트가보기

 t1.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
       case MotionEvent.ACTION_DOWN: 
        t1.setTextColor(Color.RED); // pressed state 
       break; 

       case MotionEvent.ACTION_UP: 
        t1.setTextColor(Color.WHITE); // Released state 
       break; 
      } 
      return true; 
     } 
    }); 
+0

감사합니다. –

+0

@Abhishec 쿠마 이것은 추가 지식입니다 http://stackoverflow.com/questions/21578476/what-actually-happens-if-i-return-false-in-a-ontouchlistener –

0

사용 OnTouchListener 당신이 아래로 및 이벤트까지 터치를 등록 할 수 있습니다 그런 식으로 주어지기 전에 콜백이 호출됩니다. 사용자가 TextView을 터치하면 MotionEvent case MotionEvent.ACTION_DOWN:이 색상을 빨간색으로 설정하고 사용자가 TextView에서 손가락을 떼면 case MotionEvent.ACTION_UP:은 색상을 흰색으로 설정합니다.

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     // Construct a rect of the view's bounds 
     rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom()); 
    } 

    if (event.getAction() == MotionEvent.ACTION_MOVE) { 
     if (!rect.contains(v.getLeft() + (int) event.getX(), v.getTop() + (int) event.getY())) { 
      // User moved outside bounds 
      t1.setTextColor(Color.WHITE); 
     } 
    } 
    return false; 
} 
+0

그것과 함께 onclick을 추가하면 –

+0

에게 감사합니다. 코드 –

0

는 onTouch 리스너를 지정하고 MotionEvent.ACTION_DOWN 및 MotionEvent.ACTION_MOVE을 찾아?