2013-03-16 30 views

Trả lời

7

Một cách đơn giản là sử dụng vải vẽ để vẽ 4 đứng về phía hình dạng.

Cân nhắc mỗi 4 góc. Hình chữ nhật "không bị ảnh hưởng" sẽ có kích thước đầy đủ hình chữ nhật được chạm sẽ nhỏ hơn.

Touched and untouched boxes

Bạn chỉ cần vẽ hình dạng Bốn mặt của bạn sử dụng một điểm bạn tính toán cho từng phần của hình chữ nhật. Bạn có thể có được vị trí cảm ứng, sau đó tìm ra bao nhiêu "trọng lượng" để cung cấp cho mỗi điểm.

để tính từng góc, bạn cần tìm ra số lượng "trọng lượng" để cung cấp tọa độ được chạm và số lượng "trọng lượng" để cung cấp tọa độ không ảnh hưởng. Nếu bạn chạm vào góc trên cùng bên trái, góc đó sẽ sử dụng 100% tọa độ được chạm vào, và ba góc khác sẽ sử dụng tọa độ không được chạm vào.

touched top left corner

Nếu bạn chạm vào giữa đầu, bạn sẽ nhận được một hình dạng như thế này:

touched top middle

Chúng tôi có thể tính toán các góc cho bất kỳ vị trí cảm ứng, bằng cách tính toán như thế nào xa góc liên lạc của bạn là

touched bottom left

float untouchedXWeight1 = Math.abs(xt - x1)/width; 
    //maximum of 1, minimum of 0 

    float untouchedYWeight1 = Math.abs(yt - y1)/height; 

    float untouchedWeight1 = (untouchedXWeight1 + untouchedYWeight1)/2; 
    //also maximum of 1, minimum of 0 

    float touchedWeight1 = 1 - untouchedWeight1; 

như vậy với những trọng lượng, bạn có thể tính x của bạn và vị trí y cho góc rằng:

x1 = xUntouched1 * untouchedWeight + xTouched1 * touchedWeight1; 
y1 = yUntouched1 * untouchedWeight + yTouched1 * touchedWeight1; 

Sau đó làm tương tự cho 3 góc khác.

+0

Tôi không thể áp dụng điều này cho một ViewGroup. Bạn có ý tưởng gì về điều đó không? – frankish

+0

Bạn đã thử sử dụng GLSurfaceView trước đây chưa? – HalR

+0

trong câu hỏi này: http://stackoverflow.com/questions/7734228/android-accessing-buttons-from-surfaceview một trong những câu trả lời hiển thị thông tin cơ bản: – HalR

3

tôi đã tạo ra một bản dự thảo đầu tiên ở đây: https://github.com/flavienlaurent/TiltEffect

Trong bước thứ hai, tôi sẽ làm cho nó có thể sử dụng với Button vv

Thật không may, tôi đã không sử dụng rất tốt (nhưng quá toán học cho tôi) câu trả lời của HalR

Các vấn đề liên quan