2011-10-12 44 views
8

Tôi đã tùy chỉnh SeekBar của mình - tôi sử dụng hình ảnh tùy chỉnh làm nền và hình ảnh tùy chỉnh làm ngón tay cái (How to create custom layout for seekbar in android? & How to customize the look of a SeekBar in Android?).Tùy chỉnh tìm kiếm - cách định vị đúng hình ảnh "ngón tay cái" tùy chỉnh?

Ý tưởng là để thực hiện một SeekBar trông giống như những người thân trong hình ảnh này:

enter image description here

Tôi muốn có hình ảnh ngón tay cái vừa vặn vào thanh tròn khi giá trị progress được thiết lập ở mức 0 hoặc 100 (trong số 100).

Để xác định vị trí ngón tay cái một cách chính xác (ví dụ: không chồng chéo hai đầu của thanh) Tôi đã thiết lập các paddingLeft & paddingRight giá trị cho chính xác một nửa chiều rộng chiều rộng ngón tay cái (Android: Seekbar doesn't scroll all the way to end).

.../res/layout/main.xml:

<SeekBar android:id="@+id/frequency_slider" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:max="100" android:progress="0" 
    android:progressDrawable="@drawable/seekbar_no_visible_progress" 
    android:thumb="@drawable/seekbar_thumb" <!-- this is an image --> 
    android:background="@drawable/hos_bar" <!-- this is an image --> 
    android:paddingLeft="24dp" 
    android:paddingRight="24dp"> 
</SeekBar> 

này hoạt động trong Android 2.1.


Trong Android 2.2 này tạo ra một hiệu ứng khác nhau:

enter image description here


Sau khi điều tra thêm (và cố gắng điều này với một hoàn toàn mặc định SeekBar Tôi đã tìm thấy rằng vị trí của hình ảnh ngón tay cái đã thay đổi từ 2,1 sang 2,2. Việc hack của tôi về việc thay đổi paddingLeft & paddingRight không phải là vấn đề.

  • Trong 2.1, ngón tay cái được đặt ở giữa đầu thanh, với một nửa ngón tay cái trên thanh và một nửa trên thanh.
  • Trong 2.2, ngón tay cái được đặt trong thanh, không có bất kỳ chồng chéo nào. Do đó cách kỳ lạ các giá trị đệm ảnh hưởng đến kết quả. Đây là những gì tôi đã cố gắng để đạt được, nhưng khi sử dụng một ngón tay cái tùy chỉnh, hiệu ứng này không còn hoạt động theo cùng một cách.

Tôi nghĩ tôi cần phải thực hiện một lớp tùy chỉnh java để xử lý loại điều. Trong câu hỏi này (Possible to do rounded corners in custom Progressbar progressDrawable?), nhà phát triển sử dụng ClipDrawable để tạo thanh tiến trình bình thường.

Tôi sẽ sử dụng loại đối tượng có thể kéo nào và cách đặt ngón tay cái của tôi đúng cách?

Trả lời

5

Hành vi của ngón tay cáiThông số cài đặt đã thay đổi giữa 2 phiên bản này. ThumbOffset xác định độ lệch thực tế của hình ảnh ngón tay cái, so với thông số vị trí được cung cấp.

1

Hãy thử sử dụng này:

<SeekBar android:id="@+id/seek" 
     android:layout_width="fill_parent" 
     android:layout_height="73dip" 
     android:max="80" 
     android:progress="12" 
     android:maxWidth="273dip" 
     android:maxHeight="73dip" 
     android:secondaryProgress="255" 
     android:background="@drawable/image2"  <!-- this is an image --> 
     android:progressDrawable="@drawable/image1" <!-- this is an image --> 
     android:thumb="@drawable/lock_thumb"        
     /> 

Tôi đã cố gắng này và nó đã làm việc một cách hoàn hảo với 2.1 và 2.2.

Trong trường hợp của bạn, hãy thử điều chỉnh maxWidth, max và tiến độ như tôi đã làm và thử xóa các phần đệm. Nó có thể giúp bạn giải quyết vấn đề.

enter image description here

+0

cảm ơn. Tôi đã cập nhật câu hỏi của mình. Hiệu ứng mà tôi không muốn vẫn còn (cũng trên tiêu chuẩn SeekBar). Tôi muốn các hình ảnh ngón tay cái để phù hợp độc đáo vào mỗi đầu tròn của thanh, khi giá trị tiến độ được đặt thành 0 hoặc tối đa. –

10
seekbar.setThumbOffset(0); 

Khi chạy. Không phải từ XML!

Giải quyết vấn đề cho tôi.

1

cuối cùng tìm thấy câu trả lời, trường hợp ở đây là bạn phải sử dụng android:thumbOffset, nhưng android:thumbOffsetKHÔNG một setter cho các vị trí ngón tay cái cùng với thanh tiến trình, nhưng, đó là chiều dài ngón tay cái từ nó bắt đầu để là điểm trung tâm để seekbar có thể điều chỉnh điểm trung tâm của ngón tay cái tại điểm bắt đầu của nó. Vì vậy, nếu chúng ta có một hình ảnh ngón tay cái có chiều rộng , các thumbOffset phải là (50/2), do đó seekbar sẽ điều chỉnh zero giá trị tại điểm ảnh 25 của ngón tay cái mà sẽ làm cho ngón tay cái xuất hiện chính xác ở giữa.

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