2012-03-14 60 views
21

Tôi đang sử dụng có thể vẽ cho ngón tay cái seekbar vớikích thước thay đổi của ngón tay cái seekbar

android:thumb="@drawable/thumb" 

Làm thế nào tôi có thể thiết lập kích thước của ngón tay cái này trong nhúng đơn vị? Vì tôi sử dụng kiểu dáng cho thanh tìm kiếm như

<style name="CustomSeekBar"> 
    <item name="android:indeterminateOnly">false</item> 
    <item name="android:minHeight">8dip</item> 
    <item name="android:maxHeight">8dip</item> 
    <item name="android:thumbOffset">8dip</item> 
</style> 

và tôi muốn có ngón tay cái với chiều cao và chiều rộng 12dip.

Trả lời

0

Tạo hình dạng hình chữ nhật có chiều cao và chiều rộng theo yêu cầu của bạn. Sử dụng hình dạng này có thể vẽ được cho ngón tay cái của bạn.

+4

Nhưng tôi muốn sử dụng hình ảnh làm ngón tay cái .. Và tôi muốn đổi kích thước hình ảnh này. – penguru

13

Tôi cũng đang tìm cách để làm điều tương tự và sau khi xem xét một số câu hỏi khác và đặt tất cả các câu trả lời lại với nhau, tôi đã tìm cách thay đổi kích thước ngón tay cái Seekbar trong onCreate().

Đây là mã của tôi từ onCreate(), hơi thích nghi với nhu cầu của bạn.

ViewTreeObserver vto = mySeekBar.getViewTreeObserver(); 
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
    public boolean onPreDraw() { 
     Resources res = getResources(); 
     Drawable thumb = res.getDrawable(R.drawable.thumb); 
     int h = mySeekBar.getMeasuredHeight() * 1.5; // 8 * 1.5 = 12 
     int w = h; 
     Bitmap bmpOrg = ((BitmapDrawable)thumb).getBitmap(); 
     Bitmap bmpScaled = Bitmap.createScaledBitmap(bmpOrg, w, h, true); 
     Drawable newThumb = new BitmapDrawable(res, bmpScaled); 
     newThumb.setBounds(0, 0, newThumb.getIntrinsicWidth(), newThumb.getIntrinsicHeight()); 
     mySeekBar.setThumb(newThumb); 

     mySeekBar.getViewTreeObserver().removeOnPreDrawListener(this); 

     return true; 
     } 
    }); 

Lưu ý rằng thao tác này sẽ thay đổi kích thước ngón tay cái của bạn nhưng có thể bị cắt bớt vì nó lớn hơn thanh tìm kiếm chứa (không chắc chắn). Nếu nó bị cắt bớt, bạn có thể cần phải tạo một thanh tìm kiếm cao hơn và tạo nền tìm kiếm của riêng bạn phù hợp với kích thước bạn muốn cho màn hình.

Hy vọng điều này sẽ hữu ích!

+0

Tôi đã sao chép mã của bạn, nó sẽ nén hình ảnh của tôi. Tôi không biết nơi bạn có 1,5 của bạn, nhưng khi tôi thay đổi đó thành 1, không có clipping xảy ra. – user1032613

+0

Câu 1.5 là để trả lời câu hỏi của OP. Ông muốn có một ngón tay cái kích thước 12dip và tìm kiếm của ông là 8dip, vì vậy tôi đề nghị nhân kích thước của thanh tìm kiếm bằng 1,5 để có được kích thước ngón tay cái chính xác vì bạn không thể chỉ định kích cỡ nhúng. – Pooks

+0

Ah, tôi hiểu rồi. Dù sao, mã của bạn đã giúp tôi rất nhiều, có một upvote! – user1032613

6

Từ sdk bạn có thể thấy đây là kiểu cho SeekBar cơ bản:

<style name="Widget.SeekBar"> 
    <item name="android:indeterminateOnly">false</item> 
    <item name="android:progressDrawable">@android:drawable/progress_horizontal</item> 
    <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item> 
    <item name="android:minHeight">20dip</item> 
    <item name="android:maxHeight">20dip</item> 
    <item name="android:thumb">@android:drawable/seek_thumb</item> 
    <item name="android:thumbOffset">8dip</item> 
    <item name="android:focusable">true</item> 
</style> 

Với điều này là chọn ngón tay cái:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_pressed="true" 
      android:state_window_focused="true" 
      android:drawable="@drawable/seek_thumb_pressed" /> 

    <item android:state_focused="true" 
      android:state_window_focused="true" 
      android:drawable="@drawable/seek_thumb_selected" /> 

    <item android:state_selected="true" 
      android:state_window_focused="true" 
      android:drawable="@drawable/seek_thumb_selected" /> 

    <item android:drawable="@drawable/seek_thumb_normal" /> 

</selector> 

Bạn sẽ có thể sử dụng như là một cơ sở để thay thế bản vẽ hiện đang được sử dụng (Điều này giống như giai đoạn bạn đã có).

Những drawable có thể kích cỡ khác nhau trên màn hình khác nhau dựa trên drawable kích thước thư mục xô (drawable-hdpi, drawable-large-hdpi vv) hoặc bạn có thể thực hiện khác nhau SeekBar s nhìn vào phong cách khác nhau/kích thước có thể vẽ được như vậy:

<style name="SeekBar.Thumb.Smiley" parent="@android:style/Widget.SeekBar"> 
    <item name="android:thumb">@drawable/smiley</item> 
<style> 

<style name="SeekBar.Thumb.Smiley.Large" parent="@android:style/Widget.SeekBar"> 
    <item name="android:thumb">@drawable/smiley_large</item> 
<style> 

<SeekBar 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    style="@style/SeekBar.Thumb.Smiley.Large"/> 
30

Các nhất cách linh hoạt để thiết lập kích thước ngón tay cái đối với tôi là để tạo ra lớp-drawable với hình dạng như giữ chỗ thumb_image.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item> 
     <shape> 
      <size 
       android:height="40dp" 
       android:width="40dp" /> 

      <solid android:color="@android:color/transparent" /> 
     </shape> 
    </item> 
    <item android:drawable="@drawable/scrubber_control_normal_holo"/> 

</layer-list> 

vì vậy, về cơ bản thay đổi kích thước của hình sẽ stre tch drawable, hình dạng trong suốt nên nó sẽ không hiển thị. Ngoài ra kích thước tối thiểu của ngón tay cái như vậy là kích thước của bitmap.

Dưới đây là ví dụ về bố trí:

<SeekBar 
    android:id="@+id/seekBar1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:thumb="@drawable/thumb_image" /> 

<SeekBar 
    android:id="@+id/seekBar2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" /> 

Seek bar with different thumb size

+0

điều này cũng hoạt động, nếu bạn sử dụng loại ngón tay cái lớp đó. xml có thể vẽ trong một mục có thể chọn được. hoàn hảo! –

+1

Công trình này để làm cho nó lớn hơn ... nhưng điều gì sẽ xảy ra nếu nó nhỏ hơn? – Sulby

+0

Ở đâu trong cấu trúc thư mục dự án, việc đặt thumb_image.xml có hợp lý không? – Jodes

2

tôi làm việc như thế này:

public class FlexibleThumbSeekbar extends SeekBar{ 

     public FlexibleThumbSeekbar (Context context) { 
      super(context); 
     } 

     public FlexibleThumbSeekbar (Context context, AttributeSet attrs) { 
      super(context, attrs); 

      Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.thumb); 
      Bitmap thumb=Bitmap.createBitmap(50,50, Bitmap.Config.ARGB_8888); 
      Canvas canvas=new Canvas(thumb); 
      canvas.drawBitmap(bitmap,new Rect(0,0,bitmap.getWidth(),bitmap.getHeight()), 
        new Rect(0,0,thumb.getWidth(),thumb.getHeight()),null); 
      Drawable drawable = new BitmapDrawable(getResources(),thumb); 
      setThumb(drawable); 
     } 
} 

chỉ là một mẫu, trong việc sử dụng thực sự của bạn, bạn nên xác định chiều rộng, chiều cao và hình ảnh của ngón tay cái của bạn trong một tập tin xml.

1

Một giải pháp đơn giản khác có hiệu quả đối với tôi là sử dụng scaleXscaleY. Toàn bộ thanh tìm kiếm sẽ lớn hơn theo cách này và không chỉ là ngón tay cái.

<SeekBar 
    android:id="@+id/seekBar1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:scaleX="2" 
    android:scaleY="2" /> 
Các vấn đề liên quan