3 import java.util.ArrayList;
6 import com.yuji.ef.exception.EfException;
8 import android.content.Context;
9 import android.graphics.PorterDuff.Mode;
10 import android.graphics.Rect;
11 import android.util.AttributeSet;
12 import android.view.MotionEvent;
13 import android.view.View;
14 import android.view.View.OnLongClickListener;
15 import android.view.animation.Animation;
16 import android.view.animation.Animation.AnimationListener;
17 import android.view.animation.AnimationUtils;
18 import android.widget.FrameLayout;
20 public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
21 private EverFolderActivity activity = null;
23 private LabelIconView target = null;
24 private LabelIconView destTarget = null;
25 private LabelIconView selectedTarget = null;
26 private LabelIconView cutTarget = null;
27 private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
29 private Animation anime;
34 private boolean longClickFlg = false;
35 private IconScrollView scrollView;
36 private Context context = this.getContext();
37 private boolean elabledTouchEvent = true;
39 public IconFrameLayout(Context context) {
43 public IconFrameLayout(Context context, AttributeSet attrs) {
44 super(context, attrs);
47 public IconFrameLayout(Context context, AttributeSet attrs, int defStyle) {
48 super(context, attrs, defStyle);
51 public void setActivity(EverFolderActivity activity) {
52 this.activity = activity;
56 protected void onLayout(boolean changed, int left, int top, int right,
58 super.onLayout(changed, left, top, right, bottom);
60 int size = this.getChildCount();
61 for (int i = 0; i < size; i++) {
62 LabelIconView vv = (LabelIconView) this.getChildAt(i);
63 int x2 = vv.getInitX();
64 int y2 = vv.getInitY();
66 vv.layout(x2, y2, x2 + vv.getWidth(), y2 + vv.getHeight());
70 public LabelIconView getSelectedTarget() {
71 return selectedTarget;
74 public void addView(LabelIconView child) {
78 public void addView(LabelIconView child, boolean isAddView) {
82 labelIconViewList.add(child);
85 public void removeAllViews() {
86 super.removeAllViews();
87 labelIconViewList.clear();
90 public void moveTop(LabelIconView child) {
91 this.removeView(child);
95 private LabelIconView getView(int x, int y, LabelIconView v,
96 List<LabelIconView> list, boolean flag) {
97 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;
140 scrollView.setScrollable(true);
141 scrollView.requestDisallowInterceptTouchEvent(false);
142 scrollView.invalidate();
147 public void refresh() {
148 if (selectedTarget != null) {
149 boolean flag = false;
150 long id = selectedTarget.getNodeId();
151 for (LabelIconView view : labelIconViewList) {
152 if (view.getNodeId() == id) {
153 setSelectedTarget(view);
155 setSelected(selectedTarget);
162 setSelectedTarget(null);
166 if (cutTarget != null) {
167 boolean flag = false;
168 long id = cutTarget.getNodeId();
169 for (LabelIconView view : labelIconViewList) {
170 if (view.getNodeId() == id) {
172 if (selectedTarget != cutTarget) {
173 clearColorFilter(cutTarget);
186 public void clearTarget() {
187 if (selectedTarget != null) {
188 clearColorFilter(selectedTarget);
189 setSelectedTarget(null);
194 public LabelIconView getCutTarget() {
198 public void setCutTarget(LabelIconView cutTarget) {
199 setCutTarget(cutTarget, true);
202 public void setCutTarget(LabelIconView cutTarget, boolean isUnselected) {
203 if (this.cutTarget != null){
204 setAlpha(this.cutTarget);
206 this.cutTarget = cutTarget;
207 if (cutTarget != null){
208 if (cutTarget instanceof StatusIconView){
213 setSelectedTarget(null);
218 public void setSelectedTarget(LabelIconView selectedTarget){
219 if (selectedTarget != null){
220 if (selectedTarget instanceof StatusIconView){
224 this.selectedTarget = selectedTarget;
227 public void setTarget(LabelIconView target){
229 if (target instanceof StatusIconView){
233 this.target = target;
236 private void setSelected(LabelIconView t) {
238 t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
241 private void setAlpha(LabelIconView v) {
245 private void setGrayAlpha(LabelIconView v) {
249 private void clearColorFilter(LabelIconView v) {
250 v.clearColorFilter();
251 if (v == cutTarget) {
257 public boolean onTouchEvent(MotionEvent event) {
259 if (!isElabledTouchEvent()) {
260 return super.onTouchEvent(event);
263 int x = (int) event.getRawX();
264 int y = (int) event.getRawY();
266 int dx = scrollView.getLeft();
267 int dy = scrollView.getTop();
272 int sx = x + scrollView.getScrollX();
273 int sy = y + scrollView.getScrollY();
274 LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
275 LabelIconView obj = (LabelIconView) v;
277 if (target == null) {
278 if (event.getAction() == MotionEvent.ACTION_DOWN) {
282 if (target == null) {
283 return super.onTouchEvent(event);
287 // scrollView.requestDisallowInterceptTouchEvent(true);
289 if (event.getAction() == MotionEvent.ACTION_MOVE) {
291 return super.onTouchEvent(event);
293 if (target == null || target instanceof StatusIconView) {
294 return super.onTouchEvent(event);
298 int sh = scrollView.getHeight();
299 int lh = this.getHeight();
301 int py = scrollView.getScrollY();
309 scrollView.smoothScrollTo(0, py - sdy);
312 } else if (sh - y < N) {
314 if (maxY - py < sdy) {
317 scrollView.smoothScrollTo(0, py + sdy);
322 int diffX = offsetX - x;
323 int diffY = offsetY - y;
327 obj.layout(currentX, currentY, currentX + obj.getWidth(),
328 currentY + obj.getHeight());
333 v = getView(sx, sy, target, labelIconViewList, false);
334 if (destTarget == null) {
337 setGrayAlpha(destTarget);
340 if (v != destTarget) {
341 setAlpha(destTarget);
343 if (destTarget != null) {
344 setGrayAlpha(destTarget);
348 } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
351 clearColorFilter(target);
354 if (target.getSelectedView(sx - target.getLeft(), sy
355 - target.getTop()) instanceof StatusIconView) {
356 long id = target.getNodeId();
359 activity.execute(id);
360 return super.onTouchEvent(event);
363 if (selectedTarget != null && selectedTarget == target) {
364 long id = selectedTarget.getNodeId();
365 boolean isDirNode = target.getStatusImageView() != null;
367 clearColorFilter(target);
369 setSelectedTarget(null);
370 activity.targetSelectedChanged(true);
373 activity.execute(id);
376 activity.executeView(id);
379 return super.onTouchEvent(event);
383 scrollView.requestDisallowInterceptTouchEvent(true);
387 currentX = obj.getLeft();
388 currentY = obj.getTop();
391 setSelectedTarget(target);
392 activity.targetSelectedChanged(true);
394 // コメントにしたが、デグレードするかも
395 // scrollView.setScrollable(false);
397 clearColorFilter(target);
399 setSelectedTarget(null);
400 activity.targetSelectedChanged(false);
402 } else if (event.getAction() == MotionEvent.ACTION_UP) {
404 return super.onTouchEvent(event);
406 if (target == null || target instanceof StatusIconView) {
407 return super.onTouchEvent(event);
411 if (destTarget == null || destTarget instanceof StatusIconView) {
412 obj.setAnimation(anime);
413 obj.startAnimation(anime);
415 int srcX = target.getInitX();
416 int srcY = target.getInitY();
417 target.layout(srcX, srcY, srcX + target.getWidth(), srcY
418 + target.getHeight());
421 long src = target.getNodeId();
422 long dst = destTarget.getNodeId();
424 setCutTarget(null, false);
425 activity.execute(src, dst);
433 scrollView.setScrollable(true);
434 scrollView.requestDisallowInterceptTouchEvent(false);
435 scrollView.invalidate();
438 longClickFlg = false;
441 return super.onTouchEvent(event);
442 } catch (Exception e) {
443 EfException.msg(R.string.ErrorSystem, e);
449 public boolean onLongClick(View view) {
450 if (!isElabledTouchEvent()) {
453 if (target == null) {
456 if (target instanceof StatusIconView) {
460 LabelIconView v = (LabelIconView) target;
462 v.clearColorFilter();
470 public boolean isElabledTouchEvent() {
471 return elabledTouchEvent;
474 public void setElabledTouchEvent(boolean elabledTouchEvent) {
475 this.elabledTouchEvent = elabledTouchEvent;