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 selectedTarget.setAlpha(255);
154 selectedTarget.setColorFilter(Color.RED, Mode.LIGHTEN);
158 if (cutTarget != null) {
159 long id = cutTarget.getNodeId();
160 for (LabelIconView view : labelIconViewList) {
161 if (view.getNodeId() == id) {
163 cutTarget.clearColorFilter();
164 cutTarget.setAlpha(64);
170 public void clearTarget() {
171 if (selectedTarget != null){
172 selectedTarget.clearColorFilter();
173 selectedTarget = null;
177 public LabelIconView getCutTarget() {
181 public void setCutTarget(LabelIconView cutTarget) {
182 this.cutTarget = cutTarget;
183 selectedTarget = null;
188 public boolean onTouchEvent(MotionEvent event) {
190 if (!isElabledTouchEvent()){
191 return super.onTouchEvent(event);
194 int x = (int) event.getRawX();
195 int y = (int) event.getRawY();
197 int dx = scrollView.getLeft();
198 int dy = scrollView.getTop();
203 int sx = x + scrollView.getScrollX();
204 int sy = y + scrollView.getScrollY();
205 LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
206 LabelIconView obj = (LabelIconView) v;
208 // int size = labelIconViewList.size();
209 if (target == null) {
212 if (target == null) {
213 return super.onTouchEvent(event);
217 // scrollView.requestDisallowInterceptTouchEvent(true);
219 if (event.getAction() == MotionEvent.ACTION_MOVE) {
221 return super.onTouchEvent(event);
223 if (target instanceof StatusIconView) {
224 return super.onTouchEvent(event);
228 int sh = scrollView.getHeight();
229 int lh = this.getHeight();
231 int py = scrollView.getScrollY();
239 scrollView.smoothScrollTo(0, py - sdy);
242 } else if (sh - y < N) {
244 if (maxY - py < sdy) {
247 scrollView.smoothScrollTo(0, py + sdy);
252 int diffX = offsetX - x;
253 int diffY = offsetY - y;
257 obj.layout(currentX, currentY, currentX + obj.getWidth(),
258 currentY + obj.getHeight());
263 v = getView(sx, sy, target, labelIconViewList, false);
264 if (destTarget == null) {
267 destTarget.setAlpha(128);
270 if (v != destTarget) {
271 destTarget.setAlpha(255);
273 if (destTarget != null) {
274 destTarget.setAlpha(128);
278 } else if (event.getAction() == MotionEvent.ACTION_DOWN) {
279 // if (obj == target){
282 target.clearColorFilter();
285 // if (target instanceof StatusIconView){
286 if (target.getSelectedView(sx - target.getLeft(), sy
287 - target.getTop()) instanceof StatusIconView) {
288 // StatusIconView siv = (StatusIconView) target;
289 // LabelIconView rv = siv.getRoot();
290 // long id = rv.getNodeId();
291 long id = target.getNodeId();
293 activity.execute(id);
294 return super.onTouchEvent(event);
298 if (selectedTarget != null && selectedTarget == target) {
299 long id = selectedTarget.getNodeId();
301 target.clearColorFilter();
303 selectedTarget = target;
304 activity.targetSelectedChanged(true);
306 activity.executeView(id);
308 return super.onTouchEvent(event);
312 scrollView.requestDisallowInterceptTouchEvent(true);
317 currentX = obj.getLeft();
318 currentY = obj.getTop();
320 target.setAlpha(255);
321 target.setColorFilter(Color.RED, Mode.LIGHTEN);
322 selectedTarget = target;
323 activity.targetSelectedChanged(true);
325 // コメントにしたが、デグレードするかも
326 //scrollView.setScrollable(false);
328 target.clearColorFilter();
330 selectedTarget = target;
331 activity.targetSelectedChanged(false);
334 } else if (event.getAction() == MotionEvent.ACTION_UP) {
336 return super.onTouchEvent(event);
338 if (target instanceof StatusIconView) {
339 return super.onTouchEvent(event);
344 // obj.setVisibility(View.GONE);
345 if (destTarget == null || destTarget instanceof StatusIconView) {
346 obj.setAnimation(anime);
347 obj.startAnimation(anime);
348 // layout.removeView(obj);
350 int srcX = target.getInitX();
351 int srcY = target.getInitY();
352 target.layout(srcX, srcY, srcX + target.getWidth(), srcY
353 + target.getHeight());
354 target.setAlpha(255);
356 long src = target.getNodeId();
357 long dst = destTarget.getNodeId();
358 activity.execute(src, dst);
367 scrollView.setScrollable(true);
368 scrollView.requestDisallowInterceptTouchEvent(false);
369 scrollView.invalidate();
372 longClickFlg = false;
375 return super.onTouchEvent(event);
376 } catch (Exception e) {
383 public boolean onLongClick(View view) {
384 if (!isElabledTouchEvent()){
387 if (target == null) {
390 if (target instanceof StatusIconView) {
394 LabelIconView v = (LabelIconView) target;
396 v.clearColorFilter();
404 public boolean isElabledTouchEvent() {
405 return elabledTouchEvent;
408 public void setElabledTouchEvent(boolean elabledTouchEvent) {
409 this.elabledTouchEvent = elabledTouchEvent;