0

私はリストビューを持っていて、タッチしたときに行(アイテム)の背景色を変更したいだけですが(MotionEvent.ACTION_DOWN)、リストビューのスクロール中にこれを防ぎます。これどうやってするの ?

これがListViewのBaseAdapterです

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

それは機能しますが、スクロールのためにタッチしている間も機能します。どうすればこれを防ぐことができますか? つまり、スクロールではなく、タッチイベントでのみ機能しますか?

前もって感謝します

4

1 に答える 1

1

画面に触れるたびに、MotionEvent.ACTION_DOWN が発生します。スクロール イベントで色が変化しないようにする 1 つの方法は、スクロール ジェスチャが検出された場合に色を元の状態に戻す SimpleOnGestureListener を実装することです。

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

simpleOnGestureListener に注意を払うには、GestureDetector をインスタンス化する必要があります。通常、simpleOnGestureListener を作成してから mGestureDetector を割り当てる TouchSetup() メソッドがあります。

mGestureDetector = new GestureDetector(context, simpleOnGestureListener);

最後に、OnTouchEvent(MotionEvent ev) 関数呼び出しの最後に

return mGestureDetector.onTouchEvent(event);

onTouchListener を GestureDetector に変更する必要がありますが、MotionEvent からタッチ イベントに関する必要な情報を引き出すことができます。さらに、GestureDetector を使用すると、フリングやダブルタップを簡単に検出して、適切と思われる方法で応答できます。

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

于 2012-07-19T12:51:54.820 に答える