Titanium view 移动 排序
最近要在tablet和ipad上开发,为了做到cross platform,选用了titanium这个开发工具,感觉还可以,除了环境慢一些。
Titanium号称一次开发,分别可以在android以及ios上运行。
今天简单实现了一个对几个view移动排序的功能,通过手指的拖拽,拿上来分享一下。
注意只在android上做了测试。

var window = Ti.UI.createWindow({ backgroundColor : 'white', fullscreen : false});var v_space = 10;var c_height = 100;var ismoving = false;var moving_obj;var blank_pos;var start_y = 0;var start_top = 0;var onViewTouchstart = function(e) { if (!e.source.id || e.source.id != "t_box") { return; } if (ismoving) { return; } moving_obj = getCByTouchY(t_box, e.y); if (moving_obj != null) { ismoving = true; } else { return; } moving_obj.opacity = 0.6; blank_pos = moving_obj.id; start_top = moving_obj.top; start_y = e.y;};var onViewTouchmove = function(e) { if (!ismoving) { return; } var ey = e.y; var e_pos = Math.floor((ey - 10) / (v_space + c_height)); var c_willmove = getCByTouchY(t_box, ey); if (c_willmove != null) { c_willmove.top = blank_pos * (v_space + c_height) + 10; c_willmove.id = blank_pos; blank_pos = e_pos; } else { } moving_obj.top = start_top + ey - start_y;};var onViewTouchend = function(e) { if (!ismoving) { return; } moving_obj.opacity = 1; moving_obj.id = blank_pos; moving_obj.top = blank_pos * (v_space + c_height) + 10; ismoving = false; moving_obj = null;};var onViewTouchcancel = function(e) { if (!ismoving) { return; } moving_obj.opacity = 1; moving_obj.id = blank_pos; moving_obj.top = blank_pos * (v_space + c_height) + 10; ismoving = false; moving_obj = null;};var t_box = Ti.UI.createView({ id : "t_box", backgroundColor : "#999", bottom : 250, left : 10, right : 10, height : 450});for (var i = 0; i < 4; i++) { var test_view = Ti.UI.createView({ id : i, backgroundColor : "#00f", top : i * (v_space + c_height) + 10, left : 20, width : 200, height : c_height, touchEnabled : false }); var aLabel = Ti.UI.createLabel({ text : 'Label' + i, font : { fontSize : 20 }, textAlign : 'center', touchEnabled : false }); test_view.add(aLabel); t_box.add(test_view);}t_box.addEventListener("touchstart", onViewTouchstart);t_box.addEventListener("touchmove", onViewTouchmove);t_box.addEventListener("touchend", onViewTouchend);t_box.addEventListener("touchcancel", onViewTouchcancel);function getCByTouchY(p, pos_y) { var childs = p.children; for (var i = 0; i < childs.length; i++) { var c = childs[i]; if (c == moving_obj) { continue; } if (c.top < pos_y && (c.top + c_height ) > pos_y) { return c; } } return null;}window.add(t_box);window.open();