/*
* Copyright (C) 2013 47 Degrees, LLC
* http://47deg.com
* [email protected]
*
* Copyright 2012 Roman Nurik
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.fortysevendeg.android.swipelistview.listview;
import static com.nineoldandroids.view.ViewHelper.setAlpha;
import static com.nineoldandroids.view.ViewHelper.setTranslationX;
import static com.nineoldandroids.view.ViewPropertyAnimator.animate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import android.graphics.Rect;
import android.os.Build;
import android.os.Handler;
import android.support.v4.view.MotionEventCompat;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ListView;
import com.nineoldandroids.animation.Animator;
import com.nineoldandroids.animation.AnimatorListenerAdapter;
import com.nineoldandroids.animation.ValueAnimator;
import com.nineoldandroids.view.ViewHelper;
/**
* Touch listener impl for the SwipeListView
*/
public class SwipeListViewTouchListener implements View.OnTouchListener {
private static final int DISPLACE_CHOICE = 80;
private int swipeMode = SwipeListView.SWIPE_MODE_BOTH;
private boolean swipeOpenOnLongPress = true;
private boolean swipeClosesAllItemsWhenListMoves = true;
private int swipeFrontView = 0;
private int swipeBackView = 0;
private Rect rect = new Rect();
// Cached ViewConfiguration and system-wide constant values
private int slop;
private int minFlingVelocity;
private int maxFlingVelocity;
private long configShortAnimationTime;
private long animationTime;
private float leftOffset = 0;
private float rightOffset = 0;
private int swipeDrawableChecked = 0;
private int swipeDrawableUnchecked = 0;
// Fixed properties
private SwipeListView swipeListView;
private int viewWidth = 1; // 1 and not 0 to prevent dividing by zero
private List<PendingDismissData> pendingDismisses = new ArrayList<PendingDismissData>();
private int dismissAnimationRefCount = 0;
private float downX;
private boolean swiping;
private boolean swipingRight;
private VelocityTracker velocityTracker;
private int downPosition;
private View parentView;
private View frontView;
private View backView;
private boolean paused;
private int swipeCurrentAction = SwipeListView.SWIPE_ACTION_NONE;
private int swipeActionLeft = SwipeListView.SWIPE_ACTION_REVEAL;
private int swipeActionRight = SwipeListView.SWIPE_ACTION_REVEAL;
private List<Boolean> opened = new ArrayList<Boolean>();
private List<Boolean> openedRight = new ArrayList<Boolean>();
private boolean listViewMoving;
private List<Boolean> checked = new ArrayList<Boolean>();
private int oldSwipeActionRight;
private int oldSwipeActionLeft;
/**
* Constructor
*
* @param swipeListView SwipeListView
* @param swipeFrontView front view Identifier
* @param swipeBackView back view Identifier
*/
public SwipeListViewTouchListener(SwipeListView swipeListView, int swipeFrontView, int swipeBackView) {
this.swipeFrontView = swipeFrontView;
this.swipeBackView = swipeBackView;
ViewConfiguration vc = ViewConfiguration.get(swipeListView.getContext());
slop = vc.getScaledTouchSlop();
minFlingVelocity = vc.getScaledMinimumFlingVelocity();
maxFlingVelocity = vc.getScaledMaximumFlingVelocity();
configShortAnimationTime = swipeListView.getContext().getResources().getInteger(android.R.integer.config_shortAnimTime);
animationTime = configShortAnimationTime;
this.swipeListView = swipeListView;
}
/**
* Sets current item's parent view
*
* @param parentView Parent view
*/
private void setParentView(View parentView) {
this.parentView = parentView;
}
/**
* Sets current item's front view
*
* @param frontView Front view
*/
private void setFrontView(View frontView) {
this.frontView = frontView;
frontView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
swipeListView.onClickFrontView(downPosition);
}
});
if (swipeOpenOnLongPress) {
frontView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
openAnimate(downPosition);
return false;
}
});
}
}
/**
* Set current item's back view
*
* @param backView
*/
private void setBackView(View backView) {
this.backView = backView;
backView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
swipeListView.onClickBackView(downPosition);
}
});
}
/**
* @return true if the list is in motion
*/
public boolean isListViewMoving() {
return listViewMoving;
}
/**
* Sets animation time when the user drops the cell
*
* @param animationTime milliseconds
*/
public void setAnimationTime(long animationTime) {
if (animationTime > 0) {
this.animationTime = animationTime;
} else {
this.animationTime = configShortAnimationTime;
}
}
/**
* Sets the right offset
*
* @param rightOffset Offset
*/
public void setRightOffset(float rightOffset) {
this.rightOffset = rightOffset;
}
/**
* Set the left offset
*
* @param leftOffset Offset
*/
public void setLeftOffset(float leftOffset) {
this.leftOffset = leftOffset;
}
/**
* Set if all item opened will be close when the user move ListView
*
* @param swipeClosesAllItemsWhenListMoves
*/
public void setSwipeClosesAllItemsWhenListMoves(boolean swipeClosesAllItemsWhenListMoves) {
this.swipeClosesAllItemsWhenListMoves = swipeClosesAllItemsWhenListMoves;
}
/**
* Set if the user can open an item with long press on cell
*
* @param swipeOpenOnLongPress
*/
public void setSwipeOpenOnLongPress(boolean swipeOpenOnLongPress) {
this.swipeOpenOnLongPress = swipeOpenOnLongPress;
}
/**
* Sets the swipe mode
*
* @param swipeMode
*/
public void setSwipeMode(int swipeMode) {
this.swipeMode = swipeMode;
}
/**
* Check is swiping is enabled
*
* @return
*/
protected boolean isSwipeEnabled() {
return swipeMode != SwipeListView.SWIPE_MODE_NONE;
}
/**
* Return action on left
*
* @return Action
*/
public int getSwipeActionLeft() {
return swipeActionLeft;
}
/**
* Set action on left
*
* @param swipeActionLeft Action
*/
public void setSwipeActionLeft(int swipeActionLeft) {
this.swipeActionLeft = swipeActionLeft;
}
/**
* Return action on right
*
* @return Action
*/
public int getSwipeActionRight() {
return swipeActionRight;
}
/**
* Set action on rig
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
应用源码之swipeListView优化案例.zip (125个子文件)
resources.ap_ 33KB
com.fortysevendeg.android.swipelistview.sample.activities.SwipeListViewExampleActivity.apk 242KB
jarlist.cache 119B
SwipeListViewTouchListener.class 22KB
SwipeListView.class 13KB
SwipeListViewExampleActivity.class 6KB
SwipeListViewExampleActivity$ListAppTask.class 5KB
SettingsActivity.class 5KB
PackageAdapter.class 5KB
SwipeListViewTouchListener$7.class 3KB
SwipeListViewExampleActivity$2.class 3KB
SwipeListViewExampleActivity$1.class 3KB
SettingsManager.class 3KB
PackageAdapter$3.class 2KB
PackageAdapter$2.class 2KB
SwipeListViewTouchListener$6.class 2KB
AboutDialog.class 2KB
SettingsActivity$4.class 2KB
PackageAdapter$1.class 2KB
SettingsActivity$3.class 2KB
SettingsActivity$2.class 2KB
BaseSwipeListViewListener.class 2KB
PreferencesManager.class 2KB
SettingsActivity$1.class 2KB
SwipeListViewTouchListener$9.class 2KB
R$id.class 2KB
AboutDialog$1.class 2KB
AboutDialog$3.class 1KB
AboutDialog$2.class 1KB
SwipeListViewTouchListener$5.class 1KB
R$string.class 1KB
SettingsActivity$5.class 1KB
SwipeListViewTouchListener$PendingDismissData.class 1KB
SwipeListViewTouchListener$1.class 1KB
SwipeListViewTouchListener$3.class 1KB
R$styleable.class 1KB
SwipeListViewTouchListener$4.class 1KB
SwipeListViewTouchListener$8.class 1KB
SwipeListViewTouchListener$7$1.class 1KB
SwipeListViewTouchListener$2.class 1KB
SwipeListView$1.class 1KB
PackageItem.class 1KB
R.class 1KB
SwipeListViewTouchListener$10.class 959B
R$attr.class 919B
R$style.class 857B
R$dimen.class 853B
R$color.class 733B
PackageAdapter$ViewHolder.class 721B
R$drawable.class 719B
SwipeListViewListener.class 577B
R$layout.class 553B
R$menu.class 496B
BuildConfig.class 387B
.classpath 531B
classes.dex 502KB
build.gradle 362B
android-support-v4.jar 384KB
nineoldandroids-2.4.0.jar 108KB
SwipeListViewTouchListener.java 36KB
R.java 23KB
SwipeListView.java 20KB
SwipeListViewExampleActivity.java 9KB
SettingsActivity.java 9KB
PackageAdapter.java 6KB
SettingsManager.java 3KB
AboutDialog.java 3KB
SwipeListViewListener.java 3KB
PreferencesManager.java 2KB
PackageItem.java 1KB
BaseSwipeListViewListener.java 1KB
BuildConfig.java 181B
screenshot_swipelistview_large.png 357KB
screenshot_swipelistview_small.png 85KB
icon.png 4KB
icon.png 4KB
icon.png 3KB
icon.png 3KB
action_bar_icon_discard.png 2KB
action_bar_icon_discard.png 2KB
icon.png 2KB
icon.png 2KB
action_bar_icon_discard.png 2KB
action_bar_icon_discard.png 2KB
action_bar_icon_settings.png 1KB
action_bar_icon_settings.png 1KB
action_bar_icon_discard.png 1KB
action_bar_icon_discard.png 1KB
action_bar_icon_settings.png 1KB
action_bar_icon_settings.png 1KB
action_bar_icon_settings.png 1KB
action_bar_icon_discard.png 1KB
action_bar_icon_settings.png 1KB
action_bar_icon_discard.png 1KB
action_bar_icon_discard.png 949B
action_bar_icon_discard.png 896B
action_bar_icon_discard.png 684B
action_bar_icon_discard.png 638B
action_bar_icon_settings.png 431B
action_bar_icon_settings.png 430B
共 125 条
- 1
- 2
资源评论
Soft_Leader
- 粉丝: 868
- 资源: 1628
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功