Back to project page android-class.
The source code is released under:
MIT License
If you think the Android project android-class listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
/* * Copyright (C) 2012 Google Inc./* w ww . j a va 2 s . c om*/ * Licensed to The Android Open Source Project. * * 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.android.deskclock.widget.swipeablelistview; import android.content.Context; import android.content.res.Configuration; import android.graphics.Rect; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.view.ViewConfiguration; import android.widget.ListView; import com.android.deskclock.widget.swipeablelistview.SwipeHelper.Callback; /** * Copy of packages/apps/UnifiedEmail - com.android.mail.ui.Swipeable with changes. */ public class SwipeableListView extends ListView implements Callback { private SwipeHelper mSwipeHelper; private boolean mEnableSwipe = false; public static final String LOG_TAG = LogTag.getLogTag(); private OnItemSwipeListener mOnItemSwipeListener; public SwipeableListView(Context context) { this(context, null); } public SwipeableListView(Context context, AttributeSet attrs) { this(context, attrs, -1); } public SwipeableListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); float densityScale = getResources().getDisplayMetrics().density; float pagingTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop(); mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this, densityScale, pagingTouchSlop); setItemsCanFocus(true); } @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); float densityScale = getResources().getDisplayMetrics().density; mSwipeHelper.setDensityScale(densityScale); float pagingTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop(); mSwipeHelper.setPagingTouchSlop(pagingTouchSlop); } @Override protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) { LogUtils.d(Utils.VIEW_DEBUGGING_TAG, "START CLF-ListView.onFocusChanged layoutRequested=%s root.layoutRequested=%s", isLayoutRequested(), getRootView().isLayoutRequested()); super.onFocusChanged(gainFocus, direction, previouslyFocusedRect); LogUtils.d(Utils.VIEW_DEBUGGING_TAG, new Error(), "FINISH CLF-ListView.onFocusChanged layoutRequested=%s root.layoutRequested=%s", isLayoutRequested(), getRootView().isLayoutRequested()); } @Override public void requestLayout() { Utils.checkRequestLayout(this); super.requestLayout(); } /** * Enable swipe gestures. */ public void enableSwipe(boolean enable) { mEnableSwipe = enable; } public boolean isSwipeEnabled() { return mEnableSwipe; } public void setOnItemSwipeListener(OnItemSwipeListener listener) { mOnItemSwipeListener = listener; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { if (mEnableSwipe) { return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev); } else { return super.onInterceptTouchEvent(ev); } } @Override public boolean onTouchEvent(MotionEvent ev) { if (mEnableSwipe) { return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev); } else { return super.onTouchEvent(ev); } } @Override public View getChildAtPosition(MotionEvent ev) { // find the view under the pointer, accounting for GONE views final int count = getChildCount(); int touchY = (int) ev.getY(); int childIdx = 0; View slidingChild; for (; childIdx < count; childIdx++) { slidingChild = getChildAt(childIdx); if (slidingChild.getVisibility() == GONE) { continue; } if (touchY >= slidingChild.getTop() && touchY <= slidingChild.getBottom()) { return slidingChild; } } return null; } @Override public View getChildContentView(View view) { return view; } @Override public void onScroll() { } @Override public boolean canChildBeDismissed(View v) { return true; } @Override public void onChildDismissed(final View v) { if (v != null) { if (mOnItemSwipeListener != null) { mOnItemSwipeListener.onSwipe(v); } } } @Override public void onDragCancelled(View v) { } private void redraw(View v) { int start = getFirstVisiblePosition(); for (int i=start, j = getLastVisiblePosition(); i <= j; i++) { if (v == getItemAtPosition(i)) { View view = getChildAt(i-start); getAdapter().getView(i, view, this); } } } @Override public void onBeginDrag(View v) { // We do this so the underlying ScrollView knows that it won't get // the chance to intercept events anymore requestDisallowInterceptTouchEvent(true); } public interface OnItemSwipeListener { public void onSwipe(View view); } }