import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
-import com.yuji.ef.dao.Node;
-
public class IconFrameLayout extends FrameLayout implements OnLongClickListener {
private EverFolderActivity activity = null;
private LabelIconView target = null;
- private LabelIconView dest = null;
- private List<LabelIconView> list = new ArrayList<LabelIconView>();
-
+ private LabelIconView destTarget = null;
+ private LabelIconView selectedTarget = null;
+ private LabelIconView cutTarget = null;
+ private List<LabelIconView> labelIconViewList = new ArrayList<LabelIconView>();
+
private Animation anime;
- private int startX;
- private int startY;
private int currentX;
private int currentY;
private int offsetX;
private boolean longClickFlg = false;
private IconScrollView scrollView;
private Context context = this.getContext();
-
+ private boolean elabledTouchEvent = true;
+
public IconFrameLayout(Context context) {
super(context);
}
public void setActivity(EverFolderActivity activity) {
this.activity = activity;
}
-
+
@Override
protected void onLayout(boolean changed, int left, int top, int right,
int bottom) {
}
}
+ public LabelIconView getSelectedTarget() {
+ return selectedTarget;
+ }
+
public void addView(LabelIconView child) {
- super.addView(child);
- list.add(child);
+ addView(child, true);
}
- public void removeView(LabelIconView child) {
- super.removeView(child);
- list.remove(child);
+ public void addView(LabelIconView child, boolean isAddView) {
+ if (isAddView) {
+ super.addView(child);
+ }
+ labelIconViewList.add(child);
}
- public void removeAllViews(){
+ public void removeAllViews() {
super.removeAllViews();
- list.clear();
+ labelIconViewList.clear();
}
-
- public void moveTop(LabelIconView child){
+
+ public void moveTop(LabelIconView child) {
this.removeView(child);
this.addView(child);
}
-
- private LabelIconView getView(int x, int y, LabelIconView v, List<LabelIconView> list, boolean flag) {
+
+ private LabelIconView getView(int x, int y, LabelIconView v,
+ List<LabelIconView> list, boolean flag) {
Rect rect = new Rect();
+ LabelIconView sv;
if (v != null) {
- if (flag){
- v.getHitRect(rect);
+ if (flag) {
+ v.getHitRect(rect);
if (rect.contains(x, y)) {
return v;
}
}
for (LabelIconView view : list) {
if (view != v) {
- view.getHitRect(rect);
+ view.getHitRect(rect);
if (rect.contains(x, y)) {
-
return view;
}
}
return null;
}
+ public void setScrollView(final IconScrollView scrollView) {
+ this.scrollView = scrollView;
+ this.setOnLongClickListener(this);
+ // this.setLongClickable(true);
+
+ anime = AnimationUtils.loadAnimation(context, R.anim.sample);
+ anime.setAnimationListener(new AnimationListener() {
+ public void onAnimationStart(Animation animation) {
+ }
+
+ public void onAnimationRepeat(Animation animation) {
+ }
+
+ public void onAnimationEnd(Animation animation) {
+ // if (isBt2Click) {
+ // bt2.performClick();
+ // isBt2Click = false;
+ // }
+ target = null;
+ destTarget = null;
+
+ scrollView.setScrollable(true);
+ scrollView.requestDisallowInterceptTouchEvent(false);
+ scrollView.invalidate();
+ }
+ });
+ }
+
+ public void refresh() {
+ if (selectedTarget != null) {
+ long id = selectedTarget.getNodeId();
+ for (LabelIconView view : labelIconViewList) {
+ if (view.getNodeId() == id) {
+ selectedTarget = view;
+ target = view;
+ setSelected(selectedTarget);
+
+ }
+ }
+ }
+ if (cutTarget != null) {
+ long id = cutTarget.getNodeId();
+ for (LabelIconView view : labelIconViewList) {
+ if (view.getNodeId() == id) {
+ cutTarget = view;
+ cutTarget.clearColorFilter();
+ cutTarget.setAlpha(64);
+ }
+ }
+ }
+ }
+
+ public void clearTarget() {
+ if (selectedTarget != null){
+ selectedTarget.clearColorFilter();
+ selectedTarget = null;
+ }
+ }
+
+ public LabelIconView getCutTarget() {
+ return cutTarget;
+ }
+
+ public void setCutTarget(LabelIconView cutTarget) {
+ this.cutTarget = cutTarget;
+ selectedTarget = null;
+ target = null;
+ }
+
@Override
public boolean onTouchEvent(MotionEvent event) {
try {
+ if (!isElabledTouchEvent()){
+ return super.onTouchEvent(event);
+ }
+
int x = (int) event.getRawX();
int y = (int) event.getRawY();
x -= dx;
y -= dy;
-
+
int sx = x + scrollView.getScrollX();
int sy = y + scrollView.getScrollY();
- LabelIconView v = getView(sx, sy, target, list, true);
+ LabelIconView v = getView(sx, sy, target, labelIconViewList, true);
LabelIconView obj = (LabelIconView) v;
- int size = list.size();
-
+ // int size = labelIconViewList.size();
if (target == null) {
target = obj;
}
- if (target == null){
- return super.onTouchEvent(event);
+ if (target == null) {
+ return super.onTouchEvent(event);
}
- this.getParent().requestDisallowInterceptTouchEvent(true);
-
+ // コメントにすると何が起きるか?
+ // scrollView.requestDisallowInterceptTouchEvent(true);
+
if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (!longClickFlg) {
return super.onTouchEvent(event);
}
- if (target instanceof StatusIconView){
- return super.onTouchEvent(event);
+ if (target instanceof StatusIconView) {
+ return super.onTouchEvent(event);
}
obj = target;
-
+
int sh = scrollView.getHeight();
int lh = this.getHeight();
int maxY = lh - sh;
int py = scrollView.getScrollY();
int sdy = 10;
int N = 100;
- if (y < N){
- if (py > 0){
- if (py < sdy){
+ if (y < N) {
+ if (py > 0) {
+ if (py < sdy) {
sdy = py;
}
scrollView.smoothScrollTo(0, py - sdy);
currentY -= sdy;
}
- }
- else if (sh - y < N){
- if (py < maxY){
- if (maxY - py < sdy){
+ } else if (sh - y < N) {
+ if (py < maxY) {
+ if (maxY - py < sdy) {
sdy = maxY - py;
}
scrollView.smoothScrollTo(0, py + sdy);
currentX -= diffX;
currentY -= diffY;
- // currentX = x;;
- // currentY = y;
obj.layout(currentX, currentY, currentX + obj.getWidth(),
currentY + obj.getHeight());
offsetX = x;
offsetY = y;
- v = getView(sx, sy, target, list, false);
- if (dest == null) {
- if (v != null){
- dest = v;
- dest.setAlpha(128);
+ v = getView(sx, sy, target, labelIconViewList, false);
+ if (destTarget == null) {
+ if (v != null) {
+ destTarget = v;
+ destTarget.setAlpha(128);
}
} else {
- if (v != dest){
- dest.setAlpha(255);
- dest = v;
- if (dest != null){
- dest.setAlpha(128);
+ if (v != destTarget) {
+ destTarget.setAlpha(255);
+ destTarget = v;
+ if (destTarget != null) {
+ destTarget.setAlpha(128);
}
}
}
} else if (event.getAction() == MotionEvent.ACTION_DOWN) {
- //if (obj == target){
- if (obj != null){
- if (obj != target){
+ // if (obj == target){
+ if (obj != null) {
+ if (obj != target) {
target.clearColorFilter();
target = obj;
}
- if (target instanceof StatusIconView){
- StatusIconView siv = (StatusIconView)target;
- Node sn = siv.getNode();
- sn.toggleStatus();
- activity.execute(sn);
- return super.onTouchEvent(event);
+ // if (target instanceof StatusIconView){
+ if (target.getSelectedView(sx - target.getLeft(), sy
+ - target.getTop()) instanceof StatusIconView) {
+// StatusIconView siv = (StatusIconView) target;
+// LabelIconView rv = siv.getRoot();
+// long id = rv.getNodeId();
+ long id = target.getNodeId();
+
+ activity.execute(id);
+ return super.onTouchEvent(event);
+ //return true;
}
+
+ if (selectedTarget != null && selectedTarget == target) {
+ long id = selectedTarget.getNodeId();
+
+ target.clearColorFilter();
+ target = null;
+ selectedTarget = target;
+ activity.targetSelectedChanged(true);
+
+ activity.executeView(id);
+
+ return super.onTouchEvent(event);
+ }
+
+ // ここに移動
+ scrollView.requestDisallowInterceptTouchEvent(true);
+
offsetX = x;
offsetY = y;
// TODO
currentX = obj.getLeft();
currentY = obj.getTop();
-
- target.setColorFilter(Color.RED, Mode.LIGHTEN);
-
- scrollView.setScrollable(false);
- }
- else {
+
+ setSelected(target);
+ selectedTarget = target;
+ activity.targetSelectedChanged(true);
+
+ // コメントにしたが、デグレードするかも
+ //scrollView.setScrollable(false);
+ } else {
target.clearColorFilter();
target = null;
+ selectedTarget = target;
+ activity.targetSelectedChanged(false);
}
// return false;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (!longClickFlg) {
return super.onTouchEvent(event);
}
- if (target instanceof StatusIconView){
- return super.onTouchEvent(event);
+ if (target instanceof StatusIconView) {
+ return super.onTouchEvent(event);
+ //return true;
}
obj = target;
// obj.setVisibility(View.GONE);
- if (dest == null || dest instanceof StatusIconView) {
+ if (destTarget == null || destTarget instanceof StatusIconView) {
obj.setAnimation(anime);
obj.startAnimation(anime);
// layout.removeView(obj);
+ target.getHeight());
target.setAlpha(255);
} else {
-// int srcX = target.getInitX();
-// int srcY = target.getInitY();
-// int dstX = dest.getInitX();
-// int dstY = dest.getInitY();
-//
-// target.layout(dstX, dstY, dstX + target.getWidth(), dstY
-// + target.getHeight());
-// target.init(dstX, dstY);
-// target.setAlpha(255);
-// dest.layout(srcX, srcY, srcX + dest.getWidth(),
-// srcY + dest.getHeight());
-// dest.init(srcX, srcY);
-// dest.setAlpha(255);
- Node src = target.getNode();
- Node dst = dest.getNode();
+ long src = target.getNodeId();
+ long dst = destTarget.getNodeId();
activity.execute(src, dst);
-
+
// TODO
target = null;
- dest = null;
+ destTarget = null;
+
+ // T29171
+ clearTarget();
scrollView.setScrollable(true);
scrollView.requestDisallowInterceptTouchEvent(false);
scrollView.invalidate();
}
- //this.getParent().requestDisallowInterceptTouchEvent(false);
-
- // bt2.getHitRect(rect);
- // if (rect.contains(x, y)) {
- // isBt2Click = true;
- // }
longClickFlg = false;
}
}
}
+ private void setSelected(LabelIconView t) {
+ t.setAlpha(255);
+ t.setColorFilter(0x88ff0000, Mode.LIGHTEN);
+ }
+
@Override
public boolean onLongClick(View view) {
+ if (!isElabledTouchEvent()){
+ return true;
+ }
if (target == null) {
return false;
}
- if (target instanceof StatusIconView){
+ if (target instanceof StatusIconView) {
return false;
}
-
+
LabelIconView v = (LabelIconView) target;
v.setAlpha(128);
v.clearColorFilter();
moveTop(target);
-
+
longClickFlg = true;
return true;
}
-
- public void setScrollView(final IconScrollView scrollView) {
- this.scrollView = scrollView;
- this.setOnLongClickListener(this);
- //this.setLongClickable(true);
-
- anime = AnimationUtils.loadAnimation(context, R.anim.sample);
- anime.setAnimationListener(new AnimationListener() {
- public void onAnimationStart(Animation animation) {
- }
-
- public void onAnimationRepeat(Animation animation) {
- }
-
- public void onAnimationEnd(Animation animation) {
- // if (isBt2Click) {
- // bt2.performClick();
- // isBt2Click = false;
- // }
- target = null;
- dest = null;
-
- scrollView.setScrollable(true);
- scrollView.requestDisallowInterceptTouchEvent(false);
- scrollView.invalidate();
- }
- });
+
+ public boolean isElabledTouchEvent() {
+ return elabledTouchEvent;
}
- // @Override
- // public boolean onTouchEvent(MotionEvent event) {
- // // return super.onTouchEvent(event);
- // return false;
- // }
-
- // @Override
- // public boolean onKeyDown(int keyCode, KeyEvent event) {
- // return true;
- // }
- //
- // @Override
- // public boolean onKeyLongPress(int keyCode, KeyEvent event) {
- // return true;
- // }
- //
- // @Override
- // public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent
- // event) {
- // return true;
- // }
- //
- // @Override
- // public boolean onKeyPreIme(int keyCode, KeyEvent event) {
- // return true;
- // }
- //
- // @Override
- // public boolean onKeyShortcut(int keyCode, KeyEvent event) {
- // return true;
- // }
- //
- // @Override
- // public boolean onKeyUp(int keyCode, KeyEvent event) {
- // return true;
- // }
+ public void setElabledTouchEvent(boolean elabledTouchEvent) {
+ this.elabledTouchEvent = elabledTouchEvent;
+ }
}