3 import java.util.ArrayList;
6 import android.content.Context;
7 import android.graphics.Color;
8 import android.graphics.PorterDuff.Mode;
9 import android.graphics.Rect;
10 import android.util.AttributeSet;
11 import android.view.MotionEvent;
12 import android.view.View;
13 import android.view.View.OnLongClickListener;
14 import android.view.animation.Animation;
15 import android.view.animation.Animation.AnimationListener;
16 import android.view.animation.AnimationUtils;
17 import android.widget.FrameLayout;
19 public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
20 private EverFolderActivity activity = null;
22 private LabelIconView target = null;
23 private LabelIconView destTarget = null;
24 private LabelIconView selectedTarget = null;
25 private LabelIconView cutTarget = null;
26 private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
28 private Animation anime;
33 private boolean longClickFlg = false;
34 private IconScrollView scrollView;
35 private Context context = this.getContext();
36 private boolean elabledTouchEvent = true;
38 public IconFrameLayout(Context context) {
42 public IconFrameLayout(Context context, AttributeSet attrs) {
43 super(context, attrs);
46 public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
47 super(context, attrs, defStyle);
50 public void setActivity(EverFolderActivity activity) {
51 this.activity = activity;
55 protected void onLayout(boolean changed, int left, int top, int right,
57 super.onLayout(changed, left, top, right, bottom);
59 int size = this.getChildCount();
60 for (int i = 0; i < size; i++) {
61 LabelIconView vv = (LabelIconView) this.getChildAt(i);
62 int x2 = vv.getInitX();
63 int y2 = vv.getInitY();
65 vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
69 public LabelIconView getSelectedTarget() {
70 return selectedTarget;
73 public void addView(LabelIconView child) {
77 public void addView(LabelIconView child, boolean isAddView) {
81 labelIconViewList.add(child);
84 public void removeAllViews() {
85 super.removeAllViews();
86 labelIconViewList.clear();
89 public void moveTop(LabelIconView child) {
90 this.removeView(child);
94 private LabelIconView getView(int x, int y, LabelIconView v,
95 List<LabelIconView> list, boolean flag) {
96 Rect rect = new Rect();
102 if (rect.contains(x, y)) {
107 for (LabelIconView view : list) {
109 view.getHitRect(rect);
110 if (rect.contains(x, y)) {
118 public void setScrollView(final IconScrollView scrollView) {
119 this.scrollView = scrollView;
120 this.setOnLongClickListener(this);
121 // this.setLongClickable(true);
123 anime = AnimationUtils.loadAnimation(context, R.anim.sample);
124 anime.setAnimationListener(new AnimationListener() {
125 public void onAnimationStart(Animation animation) {
128 public void onAnimationRepeat(Animation animation) {
131 public void onAnimationEnd(Animation animation) {
133 // bt2.performClick();
134 // isBt2Click = false;
139 scrollView.setScrollable(true);
140 scrollView.requestDisallowInterceptTouchEvent(false);
141 scrollView.invalidate();
146 public void refresh() {
147 if (selectedTarget != null) {
148 long id = selectedTarget.getNodeId();
149 for (LabelIconView view : labelIconViewList) {
150 if (view.getNodeId() == id) {
151 selectedTarget = view;
153 setSelected(selectedTarget);
158 if (cutTarget != null) {
159 long id = cutTarget.getNodeId();
160 for (LabelIconView view : labelIconViewList) {
161 if (view.getNodeId() == id) {
163 if (selectedTarget != cutTarget) {
164 clearColorFilter(cutTarget);
171 public void clearTarget() {
172 if (selectedTarget != null) {
173 selectedTarget.clearColorFilter();
174 selectedTarget = null;
178 public LabelIconView getCutTarget() {
182 public void setCutTarget(LabelIconView cutTarget) {
183 setCutTarget(cutTarget, true);
186 public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
187 this.cutTarget = cutTarget;
189 selectedTarget = null;
194 private void setSelected(LabelIconView t) {
196 t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
199 private void setAlpha(LabelIconView v) {
203 private void setGrayAlpha(LabelIconView v) {
207 private void clearColorFilter(LabelIconView v) {
208 v.clearColorFilter();
209 if (v == cutTarget) {
215 public boolean onTouchEvent(MotionEvent event) {
217 if (!isElabledTouchEvent()) {
218 return super.onTouchEvent(event);
221 int x = (int) event.getRawX();
222 int y = (int) event.getRawY();
224 int dx = scrollView.getLeft();
225 int dy = scrollView.getTop();
230 int sx = x + scrollView.getScrollX();
231 int sy = y + scrollView.getScrollY();
232 LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
233 LabelIconView obj = (LabelIconView) v;
235 // int size = labelIconViewList.size();
236 if (target == null) {
239 if (target == null) {
240 return super.onTouchEvent(event);
244 // scrollView.requestDisallowInterceptTouchEvent(true);
246 if (event.getAction() == MotionEvent.ACTION_MOVE) {
248 return super.onTouchEvent(event);
250 if (target instanceof StatusIconView) {
251 return super.onTouchEvent(event);
255 int sh = scrollView.getHeight();
256 int lh = this.getHeight();
258 int py = scrollView.getScrollY();
266 scrollView.smoothScrollTo(0, py - sdy);
269 } else if (sh - y < N) {
271 if (maxY - py < sdy) {
274 scrollView.smoothScrollTo(0, py + sdy);
279 int diffX = offsetX - x;
280 int diffY = offsetY - y;
284 obj.layout(currentX, currentY, currentX + obj.getWidth(),
285 currentY + obj.getHeight());
290 v = getView(sx, sy, target, labelIconViewList, false);
291 if (destTarget == null) {
294 setGrayAlpha(destTarget);
297 if (v != destTarget) {
298 setAlpha(destTarget);
300 if (destTarget != null) {
301 setGrayAlpha(destTarget);
305 } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
306 // if (obj == target){
309 clearColorFilter(target);
312 // if (target instanceof StatusIconView){
313 if (target.getSelectedView(sx - target.getLeft(), sy
314 - target.getTop()) instanceof StatusIconView) {
315 // StatusIconView siv = (StatusIconView) target;
316 // LabelIconView rv = siv.getRoot();
317 // long id = rv.getNodeId();
318 long id = target.getNodeId();
320 activity.execute(id);
321 return super.onTouchEvent(event);
325 if (selectedTarget != null && selectedTarget == target) {
326 long id = selectedTarget.getNodeId();
328 clearColorFilter(target);
330 selectedTarget = target;
331 activity.targetSelectedChanged(true);
333 activity.executeView(id);
335 return super.onTouchEvent(event);
339 scrollView.requestDisallowInterceptTouchEvent(true);
344 currentX = obj.getLeft();
345 currentY = obj.getTop();
348 selectedTarget = target;
349 activity.targetSelectedChanged(true);
351 // コメントにしたが、デグレードするかも
352 // scrollView.setScrollable(false);
354 clearColorFilter(target);
356 selectedTarget = target;
357 activity.targetSelectedChanged(false);
360 } else if (event.getAction() == MotionEvent.ACTION_UP) {
362 return super.onTouchEvent(event);
364 if (target instanceof StatusIconView) {
365 return super.onTouchEvent(event);
370 // obj.setVisibility(View.GONE);
371 if (destTarget == null || destTarget instanceof StatusIconView) {
372 obj.setAnimation(anime);
373 obj.startAnimation(anime);
374 // layout.removeView(obj);
376 int srcX = target.getInitX();
377 int srcY = target.getInitY();
378 target.layout(srcX, srcY, srcX + target.getWidth(), srcY
379 + target.getHeight());
382 long src = target.getNodeId();
383 long dst = destTarget.getNodeId();
384 activity.execute(src, dst);
393 scrollView.setScrollable(true);
394 scrollView.requestDisallowInterceptTouchEvent(false);
395 scrollView.invalidate();
398 longClickFlg = false;
401 return super.onTouchEvent(event);
402 } catch (Exception e) {
409 public boolean onLongClick(View view) {
410 if (!isElabledTouchEvent()) {
413 if (target == null) {
416 if (target instanceof StatusIconView) {
420 LabelIconView v = (LabelIconView) target;
422 v.clearColorFilter();
430 public boolean isElabledTouchEvent() {
431 return elabledTouchEvent;
434 public void setElabledTouchEvent(boolean elabledTouchEvent) {
435 this.elabledTouchEvent = elabledTouchEvent;