SwipeListView by 47degree:以编程方式滑动第一个项目

时间:2013-11-12 09:51:50

标签: android listview swipe

我想在Activity启动时SwipeListView上滑动第一项,向用户显示SwipeListView可以刷卡。

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

更新

我尝试使用

swipeListView.openAnimate(position)

这是在答案中提出的,但由于某种原因,甚至在我用数据项填充适配器之后...当我调试并到达此代码段时,swipeListView没有看到其中的项,并且失败了{ {1}}。

更新2

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

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; } } 对象永远不会被设置,而它会为空。

3 个答案:

答案 0 :(得分: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);
    }
};

答案 1 :(得分:1)

检查源代码!

SwipeListViewTouchListener设置了frontView。只有在触碰事件时才会调用setFrontView()。所以要么你以某种方式伪造这个视图的触摸事件,要么你分叉库并根据你的需要更新它。

答案 2 :(得分: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);