3

我想在启动时滑动SwipeListView上的第一项,以向用户显示ActivitySwipeListView的第一项,以向用户显示它是可滑动的。

如何使用此 UI 元素以编程方式执行此操作?

更新

我尝试使用

swipeListView.openAnimate(position)

这是在答案中提出的,但由于某种原因,即使在我用数据项填充适配器之后......当我调试并到达此代码部分时,swipeListView 看不到其中的项目,并且失败并显示NullPointerException.

更新 2

好吧,我意识到适配器中没有项目的原因是因为它尚未在 中创建onCreate,所以我将此代码移至方法:

public void onWindowFocusChanged(boolean hasFocus){}

我的活动,现在它运行但仍然在库的以下方法上失败SwipeListView

 private void resetCell() {
    if (downPosition != ListView.INVALID_POSITION) {
        if (swipeCurrentAction == SwipeListView.SWIPE_ACTION_CHOICE) {
            backView.setVisibility(View.VISIBLE);
        }
        frontView.setClickable(opened.get(downPosition));
        frontView.setLongClickable(opened.get(downPosition));
        frontView = null;
        backView = null;
        downPosition = ListView.INVALID_POSITION;
    }
}

这样做的原因是,当此方法运行时,该frontView对象永远不会被设置并且它为空。

4

3 回答 3

1

检查源代码!

SwipeListViewTouchListener设置frontView。setFrontView()仅在发生触地事件时才被调用。所以要么你以某种方式为这个视图伪造一个触摸事件,要么你分叉库并根据你的需要更新它。

于 2013-11-17T23:38:56.460 回答
1

实际上,我已经为 Showcase 的实例在库中重新创建了使用过的动画,所以我所做的是:

private void generateRevealAnimate(final View view) {
    animate(view)
    .translationX(-520)
    .setDuration(500)
    .setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {}
    }); 
}

private void generateCloseAnimate(final View view) {
    animate(view)
    .translationX(0)
    .setDuration(500)
    .setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {}
    });
}

然后在所需的视图上一个接一个地运行它们:

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() 
    {
        generateRevealAnimate(firstFrontView); 
        handler.postDelayed(new Runnable() {
            @Override
            public void run()
            {
                generateCloseAnimate(firstFrontView);  
            }
        }, 1400);
    }
}, 1400);                 
于 2013-11-30T17:47:39.213 回答
1

打开你应该使用的项目

swipeListView.openAnimate(position)

要关闭您可以使用的项目:

swipeListView.closeAnimate(position);
swipeListView.closeOpenedItems();

这是来自工作项目的一些代码:

private BaseSwipeListViewListener albumsLIstener = new BaseSwipeListViewListener() {
    @Override
    public void onClickFrontView(int position) {
        if (albumsListsView.isOpened(position)) {
            albumsListsView.closeAnimate(position);
        } else albumsListsView.openAnimate(position);
    }

    @Override
    public void onClickBackView(int position) {
        if (albumsListsView.isOpened(position)) {
            albumsListsView.closeAnimate(position);
        } else albumsListsView.openAnimate(position);
    }
};
于 2013-11-12T14:20:49.140 回答