Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android listview:可通过longclicklistener绘制单元格转换_Android_Listview_Transitiondrawable - Fatal编程技术网

android listview:可通过longclicklistener绘制单元格转换

android listview:可通过longclicklistener绘制单元格转换,android,listview,transitiondrawable,Android,Listview,Transitiondrawable,我有一个带有OnItemClickListener和OnItemLongClickListener的列表视图 在我的listadapter的getView方法中,我设置了一个以TransitionDrawable为背景的视图,接下来我将OnTouchListener应用于该视图,这样当用户按下并按住该视图时,他将看到转换发生 问题是OnTouchListener必须返回true,否则将只捕获ACTION\u DOWN motionevent。但通过返回true,我的OnItemClickList

我有一个带有OnItemClickListener和OnItemLongClickListener的列表视图

在我的listadapter的getView方法中,我设置了一个以TransitionDrawable为背景的视图,接下来我将OnTouchListener应用于该视图,这样当用户按下并按住该视图时,他将看到转换发生

问题是OnTouchListener必须返回true,否则将只捕获ACTION\u DOWN motionevent。但通过返回true,我的OnItemClickListener和OnItemLongClickListener不会被解雇

问题是如何既显示TransitionDrawable的动画,又触发单击事件

阵列适配器的getView(..):

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    ...

    convertView.setOnTouchListener(touchListener);
    return convertView;
}
OnTouchLIstener:

OnTouchListener touchListener = new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {         
        TransitionDrawable transition = (TransitionDrawable)v.getBackground();

        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            transition.startTransition(ViewConfiguration.getLongPressTimeout());
            return true;
        }
        else {
            transition.resetTransition();
        }

        return false;
    }
};

我最终为单击和长单击自己创建了一个界面,并在onTouchListener中处理它们:

private class TransitionView implements OnTouchListener {
    private Object object;
    TransitionDrawable transition;
    CountDownTimer timer;
    boolean running;
    View v;

    public TransitionView(Object object) {
        this.object = object;

        int time = ViewConfiguration.getLongPressTimeout();
        timer = new CountDownTimer(time, time) {

            @Override
            public void onTick(long millisUntilFinished) { }

            @Override
            public void onFinish() {
                running = false;
                transition.resetTransition();
                longClickListener.onItemLongClick(TransitionView.this.object, v);
            }
        };
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        this.v = v;

        transition = (TransitionDrawable)v.getBackground();

        if(event.getAction() == MotionEvent.ACTION_DOWN) {
            transition.startTransition(ViewConfiguration.getLongPressTimeout());
            timer.start();
            running = true;
            return true;
        }
        else if(event.getAction() == MotionEvent.ACTION_UP) {
            if(running) {
                timer.cancel();
                running = false;
                itemClickListener.onListItemClick(object, v);
            }
            transition.resetTransition();
        }
        else if(event.getAction() == MotionEvent.ACTION_CANCEL) {
            transition.resetTransition();
        }

        return false;
    }
}