summaryrefslogtreecommitdiffstats
path: root/src/com/android/gallery3d/filtershow/state/DragListener.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/gallery3d/filtershow/state/DragListener.java')
-rw-r--r--src/com/android/gallery3d/filtershow/state/DragListener.java110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/filtershow/state/DragListener.java b/src/com/android/gallery3d/filtershow/state/DragListener.java
new file mode 100644
index 000000000..1aa81ed69
--- /dev/null
+++ b/src/com/android/gallery3d/filtershow/state/DragListener.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2013 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.gallery3d.filtershow.state;
+
+import android.view.DragEvent;
+import android.view.View;
+import android.widget.ArrayAdapter;
+import android.widget.LinearLayout;
+
+class DragListener implements View.OnDragListener {
+
+ private static final String LOGTAG = "DragListener";
+ private PanelTrack mStatePanelTrack;
+ private static float sSlope = 0.2f;
+
+ public DragListener(PanelTrack statePanelTrack) {
+ mStatePanelTrack = statePanelTrack;
+ }
+
+ private void setState(DragEvent event) {
+ float translation = event.getY() - mStatePanelTrack.getTouchPoint().y;
+ float alpha = 1.0f - (Math.abs(translation)
+ / mStatePanelTrack.getCurrentView().getHeight());
+ if (mStatePanelTrack.getOrientation() == LinearLayout.VERTICAL) {
+ translation = event.getX() - mStatePanelTrack.getTouchPoint().x;
+ alpha = 1.0f - (Math.abs(translation)
+ / mStatePanelTrack.getCurrentView().getWidth());
+ mStatePanelTrack.getCurrentView().setTranslationX(translation);
+ } else {
+ mStatePanelTrack.getCurrentView().setTranslationY(translation);
+ }
+ mStatePanelTrack.getCurrentView().setBackgroundAlpha(alpha);
+ }
+
+ @Override
+ public boolean onDrag(View v, DragEvent event) {
+ switch (event.getAction()) {
+ case DragEvent.ACTION_DRAG_STARTED: {
+ break;
+ }
+ case DragEvent.ACTION_DRAG_LOCATION: {
+ if (mStatePanelTrack.getCurrentView() != null) {
+ setState(event);
+ View over = mStatePanelTrack.findChildAt((int) event.getX(),
+ (int) event.getY());
+ if (over != null && over != mStatePanelTrack.getCurrentView()) {
+ StateView stateView = (StateView) over;
+ if (stateView != mStatePanelTrack.getCurrentView()) {
+ int pos = mStatePanelTrack.findChild(over);
+ int origin = mStatePanelTrack.findChild(
+ mStatePanelTrack.getCurrentView());
+ ArrayAdapter array = (ArrayAdapter) mStatePanelTrack.getAdapter();
+ if (origin != -1 && pos != -1) {
+ State current = (State) array.getItem(origin);
+ array.remove(current);
+ array.insert(current, pos);
+ mStatePanelTrack.fillContent(false);
+ mStatePanelTrack.setCurrentView(mStatePanelTrack.getChildAt(pos));
+ }
+ }
+ }
+ }
+ break;
+ }
+ case DragEvent.ACTION_DRAG_ENTERED: {
+ mStatePanelTrack.setExited(false);
+ if (mStatePanelTrack.getCurrentView() != null) {
+ mStatePanelTrack.getCurrentView().setVisibility(View.VISIBLE);
+ }
+ return true;
+ }
+ case DragEvent.ACTION_DRAG_EXITED: {
+ if (mStatePanelTrack.getCurrentView() != null) {
+ setState(event);
+ mStatePanelTrack.getCurrentView().setVisibility(View.INVISIBLE);
+ }
+ mStatePanelTrack.setExited(true);
+ break;
+ }
+ case DragEvent.ACTION_DROP: {
+ break;
+ }
+ case DragEvent.ACTION_DRAG_ENDED: {
+ if (mStatePanelTrack.getCurrentView() != null
+ && mStatePanelTrack.getCurrentView().getAlpha() > sSlope) {
+ setState(event);
+ }
+ mStatePanelTrack.checkEndState();
+ break;
+ }
+ default:
+ break;
+ }
+ return true;
+ }
+}