2012-07-19 1 views
0

나는 listview를 가지고 있는데, 행 (item)을 터치 할 때 (motionEvent.ACTION_DOWN) 그 배경색을 바꾸고 싶지만 listview를 스크롤하는 동안 이것을 막고 싶다. 어떻게해야합니까?onTroll이 아닌 onTouch 행의 배경색을 변경하는 방법은 무엇입니까?

여기 ListView에

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View row = convertView; 
    DataHolder holder = null; 

    if (row == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     row = inflater.inflate(layoutResourceId, parent, false); 

     holder = new DataHolder(); 
     holder.newAppsLayout = (LinearLayout) row.findViewById(R.id.new_apps_layout);    
     holder.imageView1 = (ImageView) row.findViewById(R.id.imageView1);    
     row.setTag(holder); 
    } else { 
     holder = (DataHolder) row.getTag(); 
    } 

    Data data = data.get(position); 
    ImageCacheManager.loadImage(holder.imageView1, item.getIconUrl()); 

    final DataHolder finalHolder = holder; 
    row.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
        finalHolder.newAppsLayout.setBackgroundColor(Color.GRAY); 
       } else { 
       finalHolder.newAppsLayout.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.content_bg));     } 

      return false; 
     } 
    }); 
    return row; 


static class DataHolder { 
    LinearLayout newAppsLayout; 
    ImageView imageView1; 
} 

이 작품에 대한 내 BaseAdapter입니다뿐만 아니라 스크롤하는 동안 터치를 사용할 수 있습니다. 어떻게 이것을 막을 수 있습니까? 내 말은, 터치 이벤트 만 있지만 스크롤은하지 않는 것입니까? 사전에

덕분에

답변

1

언제 당신은 당신이 MotionEvent.ACTION_DOWN를 얻을 수 화면을 터치. 스크롤 이벤트에 대한 색상 변경을 방지하는 한 가지 방법은 스크롤 제스처가 감지되면 색상을 원래 상태로 되돌릴 SimpleOnGestureListener를 구현하는 것입니다. 당신은 GestureDetector이 있어야합니다

simpleOnGestureListener = new SimpleOnGestureListener(){  
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY){ 
      //put color code here 
      return super.onScroll(e1, e2, distanceX, distanceY); 
     } 
    }; 

은 일반적으로 TouchSetup()을 simpleOnGestureListener를 생성하는 방법 다음 할당 mGestureDetector이있는 simpleOnGestureListener .I에주의 인스턴스화.

mGestureDetector = new GestureDetector(context, simpleOnGestureListener); 

마지막으로,이 모든 당신이 GestureDetector에 onTouchListener을 변경,하지만 여전히 어떤 정보를 당신을 당길 수 필요

return mGestureDetector.onTouchEvent(event); 

당신의 OnTouchEvent (MotionEvent의 EV) 함수 호출의 끝에서 MotionEvent에서 터치 이벤트가 필요합니다. 또한 GestureDetector를 사용하면 플링이나 더블 탭을 쉽게 감지하고 적절하다고 판단되는 방식으로 응답 할 수 있습니다.

http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html

+0

이 의미가 있습니까? row.setOnTouchListener (새 View.OnTouchListener() { @Override 공공 부울 onTouch (보기보기, MotionEvent motionEvent) { 반환 mGestureDetector.onTouchEvent (motionEvent) } }); 그러나 그것은 작동하지 않았다. 간단한 코드를 줄 수 있습니까? –

+0

내 이해에서 SimpleGestureDetector 및 GestureDetector는 전체 화면에서 작동하므로 메서드 외부에서 초기화해야하며 작업이 실행되는 동안 제스처를 청취해야합니다. 생성자에 gesturedetector 항목을 설정 한 경우, onTouch 메서드에서보기에 해당하는 플래그 (viewColorChange = true)를 설정 한 다음 onScroll() 메서드에서 해당 플래그를 확인하고 true이면 색상을 재설정 할 수 있습니다. onTouch 메서드가 끝날 때 여전히 mGestureDetector.onTouchEvent (motionEvent)를 반환 할 수는 있지만 확실하지는 않습니다. – Dirk

관련 문제