2013-05-28 27 views
6

Tôi đang cố gắng tạo động và sau đó di chuyển hình ảnh trong hoạt động Android. Tuy nhiên, các phương thức setX() và setY() dường như không hoạt động chính xác. Nó chính xác đặt vị trí của một hình ảnh khi nó được tạo và đặt đầu tiên, nhưng bất kỳ nỗ lực nào để cập nhật nó sẽ dẫn đến hình ảnh được đặt sai vị trí. Ví dụ: hình ảnh di chuyển trên mã sau:Android setX() và setY() hoạt động lạ

ImageView image; 
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_this); 

if(action == MotionEvent.ACTION_DOWN){ 

    image = new ImageView(MyClass.this);        
    layout.addView(image, width, height); 
    image.setX(206); 
    image.setY(206); 
} 
else if(action == MotionEvent.ACTION_MOVE){ 

    if(image != null){ 
     image.setX(206); 
     image.setY(206); 
    } 
} 

Bật ACTION_MOVE hình ảnh được di chuyển mặc dù giá trị vị trí x và y vẫn giữ nguyên. Cha mẹ của hình ảnh vẫn giữ nguyên. Kích thước vẫn giữ nguyên. Nếu tôi nhận được các giá trị x và y nó vẫn sẽ nói 206, nhưng nó không được đặt tại (206, 206) trên hoạt động nữa. Tôi bị mất là tại sao điều này đang xảy ra. Tôi không thể tìm thấy bất kỳ dấu hiệu nào cho thấy hình ảnh đã bị thay đổi trừ khi nó thay đổi địa điểm.

Trả lời

13

Thực sự, điều này không nên xảy ra. Ngoài ra, hãy thử thiết lập một biến khác và thiết lập x và y cho nó, hoặc nhận x và nhận y và thêm 0 vào mỗi biến cho cùng một vị trí.

Như đã nêu trong Android - Use of view.setX() and setY in api 8, nếu bạn đã tìm kiếm, có một giải pháp mà cũng làm việc ngay cả trước khi api 8. LayoutParams công trình như thế này -

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); //WRAP_CONTENT param can be FILL_PARENT 
params.leftMargin = 206; //XCOORD 
params.topMargin = 206; //YCOORD 
childView.setLayoutParams(params); 

Có nhiều thông tin ở đó. Tôi hy vọng điều này sẽ giúp

+1

Tyvm cho câu trả lời. Sử dụng params làm việc cho tôi. Tôi vẫn còn tò mò như những gì đang xảy ra với setX và Y mặc dù. Tôi đã thử tất cả mọi thứ nhưng bất cứ lúc nào tôi đặt một giá trị sau khi nó đã được thiết lập trong sự kiện xuống (không có vấn đề làm thế nào tôi đặt giá trị mới) hình ảnh được chuyển đến vị trí sai. Của nó đi bởi một giá trị không đổi khoảng 30 pixel quá xa và bên trái trên giả lập tôi đang thử nghiệm với. Tôi nghĩ rằng nó đã được thay đổi cha mẹ của xem hoặc một cái gì đó nhưng đó không phải là nó. Không có gì khác biệt mà tôi có thể tìm thấy. – user2423199

+0

Có thể là mật độ không? Khi đặt số theo chương trình, bạn nên nhân với mật độ getResources(). GetDisplayMetrics(). Để thay đổi giá trị px thành giá trị dp – marmor

1

Chạy vào cùng một vấn đề. View.setLeft(int)/View.setTop(int) đã hoạt động cho tôi

+0

Không hoạt động cho tôi. Chỉ cần kéo dài chế độ xem của tôi theo chiều dọc – tieorange

+1

@ itorange xuống phiếu bầu? Tôi tin rằng bạn nên làm tương tự cho mọi câu trả lời không hiệu quả với bạn. Nhưng nhìn chung, các câu trả lời khác nhau sẽ giúp bạn tiết kiệm thời gian hơn khi giải quyết vấn đề với sự trợ giúp của người khác vì vấn đề tương tự thực sự có thể có các giải pháp khác nhau và có thể giúp bạn. Hoặc có thể không. Chỉ cần tiếp tục đào trong trường hợp này. Vì vậy, tôi thực sự không thể nhìn thấy bất kỳ lý do thực tế để xuống câu trả lời bỏ phiếu nếu nó không làm việc cho trường hợp cụ thể của bạn vì nó vẫn có thể hữu ích cho người khác. Khuyến khích chia sẻ các giải pháp khác nhau bằng cách bỏ phiếu cho những gì đã làm việc cho bạn chứ không phải ngược lại câu thơ –

0

Hoạt động của bạn ở chế độ toàn màn hình phải không? Nếu không cố gắng làm cho nó toàn màn hình và nó sẽ giải quyết vấn đề của bạn.

0

Khá muộn để trả lời, nhưng nếu người khác đang đối mặt với cùng một vấn đề. Điều này đã khắc phục sự cố cho tôi đó là các phần đệm trong tệp sơ đồ bố trí:

android:paddingBottom="16dp" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:paddingTop="16dp" 
0

Là người thực sự đối mặt với vấn đề này, tôi đã giải quyết vấn đề này bằng cách xóa bất kỳ phần đệm nào trong parentView. Phần đệm dường như gây ra thay đổi về kích thước bố cục

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