我如何在Titanium中實現Android的雙指縮放?如何在Titanium中實現Android的雙指縮放
我是在Titanium中爲iPhone製作的,因爲有一個pinch
事件和zoomScal
屬性可用於iPhone的Titanium中的scroolView
:)但這些不適用於Android。 :(
這個解決方案同樣的問題,爲iPhone提供in the Appcelerator archives。
我如何在Titanium中實現Android的雙指縮放?如何在Titanium中實現Android的雙指縮放
我是在Titanium中爲iPhone製作的,因爲有一個pinch
事件和zoomScal
屬性可用於iPhone的Titanium中的scroolView
:)但這些不適用於Android。 :(
這個解決方案同樣的問題,爲iPhone提供in the Appcelerator archives。
你必須包裹touchstart
,touchmove
和touchend
事件仿效Android的這種行爲。此外,由於許多Android設備不支持多點觸摸,你需要考慮到這一點
首先,你必須設置你的滾動視圖正確,例如,由於Android沒有zoomScale
屬性,你需要用一個矩陣來模擬這個是這樣的:。
var scrollView = Ti.UI.createScrollView({... Init here...});
var contentOfScrollView = Ti.UI.createView({
width : //..bigger than scrollview,
height : //..bigger than scrollview,
transform : Ti.UI.create2DMatrix()
});
首先,我會嘗試跟蹤視圖中的所有活動觸摸對象。然後,如果您有兩次觸摸,請獲取它們之間的距離並將其保存爲原始縮放比例,由此可以隨着用戶移動比較新的距離。這種方法將打破,如果有兩個以上的觸摸,並不是很強大,因爲它不能解釋任何邊緣情況,但它有時會工作:-)
主要問題是鈦不通過的ID觸摸,或允許您獲取所有觸摸,因此很難跟蹤哪個觸摸是在刪除或添加觸摸時觸摸的。這是一個簡單的代碼示例,它受到我上面概述的(我不試圖跟蹤哪個觸摸是哪個),你將不得不擺弄它使它更強大,但我確信你可以從這裏取得:
var touches = [];
var zoomScale = 1.0;
var lastDistance = 0.0;
var wratio = contentOfScrollView.width/scrollView.width;
var hratio = contentOfScrollView.height/scrollView.height;
現在讓我們添加我們的監聽器。
// Listeners
scrollview.addEventListener('touchstart' , function(e) {
touches.push({x : e.x, y : e.y});
});
scrollview.addEventListener('touchmove' , function(e) {
if(touches.length == 2 && distance > 0) {
// Calculate distance between touches
var dx = touches[1].x - touches[0].x;
var dy = touches[1].y - touches[0].y;
var distance = Math.sqrt(dx*dx+dy*dy);
// Heres where you would do your scaling based on whatever your
// use case is. You could try something like this, tune it yourself though
scrollView.zoomScale = lastDistance - distance;
// Now set the matrix of the content!
contentOfScrollView.transform.scale(zoomScale*wratio, zoomScale*hratio);
// Save for later
lastDistance = distance;
} else {
// Reset everything
lastDistance = 0.0;
}
});
scrollview.addEventListener('touchend' , function(e) {
touches.pop();
});
scrollview.addEventListener('touchcancel' , function(e) {
touches.pop();
});
這是不是一個完整的,強大的,或錯誤執行測試,但我不能爲你寫的所有代碼,實驗以此爲出發點。祝你好運!
** Android不支持touchStart,touchMove和touchEnd事件,請參閱:http:// docs。 appcelerator.com/titanium/2.1/#!/api/Titanium.UI.ScrollView-event-touchmove – Ankit
是的。但是我意外地使用了camlcase,所以它支持'touchstart'' touchmove''' touchend''''touchStart'。我編輯了答案來反映這一點。 **我也可以用黑體字寫出。** :-) –
Android不支持zoomScale http://docs.appcelerator.com/platform/latest/#!/api/Titanium.UI.ScrollView-property-zoomScale – paulguy
這是一個古老的職位,但這個模塊titanium-android-pinchview將根據他們的文檔也許是有用的人
,捏活動僅適用於iOS http://docs.appcelerator.com/titanium/latest/# !/api/Titanium.UI.ScrollView(展開頁面底部的捏事件箭頭) – Ronnie