2011-12-14 23 views
9

Hiện tại tôi có một số ImageView kéo dài chiều dài của thiết bị và được chia tỷ lệ bằng 3. Rõ ràng, các cạnh được cắt bên ngoài màn hình. Tôi muốn hình động bắt đầu với phía bên trái của hình ảnh ở phía bên trái của thiết bị, sau đó chuyển nó sang cho đến khi bên phải của hình ảnh ở bên phải của thiết bị.Bản dịch tương đối trong hình ảnh động trong xml

tôi có thể đạt được chúng bằng cách thiết lập các hình ảnh để nó là cơ sở ban đầu sau đó về cơ bản làm điều này:

<objectAnimator 
    android:propertyName="translationX" 
    android:duration="6000" 
    android:valueTo="-1280" 
    android:valueType="floatType" 
    /> 

Tuy nhiên, chỉ có các công trình này vì tôi biết kích thước chính xác của hình ảnh và kích thước chính xác của Motorola của tôi Xoom. Đương nhiên, tôi muốn điều này làm việc trên bất kỳ thiết bị nào, vì vậy tôi cần một cái gì đó ít mã hóa cứng hơn. Với hình ảnh động Tween, nó hoạt động ngay lập tức kể từ khi bạn có thể dịch một cái gì đó dựa trên một tỷ lệ phần trăm của kích thước của nó. Nó không hoàn hảo, nhưng nó hoạt động đủ tốt cho hiệu ứng này. Bất động sản aniimations dường như không có điều này. Các thuộc tính translationXX phải có các đơn vị.

Có cách nào đơn giản để dịch một chế độ xem có các hoạt ảnh thuộc tính dựa trên vị trí tương đối không? Tôi có phải tạo một tệp hoạt ảnh riêng biệt cho mỗi thứ nguyên không? Có cách nào khác để tôi có thể đạt được hiệu ứng này không? Tôi không muốn tạo ra hình ảnh động của riêng mình.

+0

bạn đã biết làm thế nào để làm điều đó ??? – confucius

Trả lời

0

Bạn có thể tạo mã cho các nhóm 'kích thước thiết bị' riêng biệt mà bạn muốn hỗ trợ (ví dụ: máy tính bảng, phong cảnh điện thoại, v.v.) có chiều rộng dp đã biết không. Sau đó, bạn có thể sử dụng điều này có thể dưới đây để mở rộng hình ảnh (trong đó 384 là 384dp cho một chiều rộng thiết bị nhất định) và làm một cái gì đó tương tự cho giá trịĐể int bạn cần.

//Get the device screen pixel density so that you can scale 
//the image in density independent pixels rather than pixels 
final float scale = getActivity().getResources(). 
getDisplayMetrics().density; 

//set the number of dp for the height and width by changing 
//the number you multiply the (scale + 0.5f) by e.g. 384 
int pixelsh = (int) (384 * scale + 0.5f); 
int pixelsw = (int) (384 * scale + 0.5f); 

Đây là cách để chuyển đổi pixel tuyệt đối thành pixel dp. Tôi không biết làm thế nào để sử dụng chúng cho những gì bạn đang làm nhưng ít nhất nó là một sự khởi đầu.

+0

Điều đó không đủ chi tiết vì không thể xác định thời gian biên dịch kích thước của khung nhìn sẽ bằng pixel. Tôi đã kết thúc việc bán ý tưởng và chỉ tạo ObjectAnimators khi chạy các kích thước. – DeeV

0

Bạn nên tạo hoạt ảnh tại thời gian chạy bằng cách chuyển kích thước màn hình của màn hình thiết bị hiện tại. Đầu tiên có được kích thước màn hình (Chú ý: các số liệu (chiều rộng, chiều cao) thay đổi tùy thuộc vào vòng quay của thiết bị):

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 

int screenSize = metrics.widthPixels; 

và sau đó tạo ObjectAnimator của bạn:

ObjectAnimator oa = ObjectAnimator.ofFloat(*yourImageView*, "translationX", 0, (Float) screenSize); 
oa.setDuration(6000); 
oa.start(); 
Các vấn đề liên quan