2011-12-14 25 views
16

tôi là tạo ra một gradient xuyên tâm như:Radial Gradient cho dpi khác nhau

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
<gradient 
     android:startColor="#7faacaFF" 
     android:endColor="#cfe1edFF" 
     android:gradientRadius="326" 
     android:type="radial"/> 
</shape> 

Nhưng trong lĩnh vực gradientRadius sử dụng các giá trị như sp và nhúng trả về một lỗi. Có cách nào để chỉ định bán kính và tỷ lệ cho mdpi và tự động chia tỷ lệ trong phần còn lại của mật độ màn hình hay là cần thiết để tạo nhiều tệp có thể vẽ?

Trả lời

22

Vì vậy, những gì nếu bạn làm điều này:

res/drawable/foo.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
           android:shape="rectangle"> 
<gradient 
     android:startColor="#7faacaFF" 
     android:endColor="#cfe1edFF" 
     android:gradientRadius="@dimen/radius" 
     android:type="radial"/> 
</shape> 

res/values-mdpi/dimens.xml

<resources ...> 
... 
<item name="radius" format="float" type="dimen">326</item> 
.... 

</resources> 

res/values-hdpi/dimens.xml

<resources ...> 
... 
<item name="radius" format="float" type="dimen">200.34</item> 
.... 

</resources> 

Bạn nghĩ sao?

+0

Cảm ơn rất nhiều, điều này sẽ được chấp nhận là phản hồi – Arnaud

+0

Có điều này hoạt động như một sự quyến rũ !! Cảm ơn !! – DevAndroid

0

docs nói rằng bạn có thể chỉ định thuộc tính gradientRadius làm phao (đoán rằng nó có nghĩa là px) hoặc dưới dạng phân số.

Có thể là một giá trị phân số, là số dấu phẩy động được nối với% hoặc% p, chẳng hạn như "14,5%". Hậu tố% luôn luôn có nghĩa là một tỷ lệ phần trăm của kích thước cơ bản; hậu tố% p tùy chọn cung cấp kích thước tương đối so với một số vùng chứa chính.

Bạn đã thử điều đó chưa? Điều đó sẽ làm cho nó có thể chỉ định kích thước trong dp hoặc bất kỳ đơn vị nào trong bố trí, và tham khảo nó từ đây. Mặc dù vậy, điều lạ lẫm là hầu hết các kích thước được chỉ định dưới dạng thứ nguyên trong định dạng xml có thể vẽ được.

+4

Vâng, tôi đã cố gắng với điều đó bản thân mình và không thể làm cho nó hoạt động. Nó có vẻ như phần trăm chỉ chia cho bất cứ điều gì tôi đã viết với 100. Vì vậy, kích thước cơ bản được đề cập ở trên là 1px. Ký hiệu% p đã làm như vậy, vì vậy đó là một thất bại ...xấu của tôi: | –

+0

phân đoạn không hoạt động trên Kitkat (API 19) và thấp hơn cũng không 50% không 50% p, có thể vẽ được không được hiển thị –

-2

Sử dụng tỷ lệ phần trăm, trong trường android: gradientRadius.

Ví dụ:

Đối với một bộ radious 50% xuống còn 50000% p

<gradient 
       android:angle="45" 
       android:centerX="0.5" 
       android:centerY="0.5" 
       android:endColor="#123123" 
       android:gradientRadius="50000%p" 
       android:startColor="#456456" 
       android:type="radial" /> 
+0

Điều này chỉ đơn giản là không chính xác. Như Tobias đã nêu trong phần bình luận câu trả lời của chính mình,% và% p đơn giản chia số được cung cấp bởi 100. – Murkaeus

+0

vẫn còn, đây là điều duy nhất làm việc cho tôi. – Tamas

+0

% shoudl không "làm việc cho bạn". bạn đã thử điều này trên các thiết bị kích thước màn hình khác nhau chưa? – Poutrathor

8

Cũ câu hỏi, nhưng câu trả lời này cho thấy xếp hạng cao trong Google và tôi tin tưởng một cách tiếp cận khác là khả năng mở rộng hơn. Thay vì phải cung cấp kích thước cho mỗi mật độ, tạo ra một không gian mật độ độc lập từ XML:

<dimen name="gradient_radius">25dp</dimen> 

Vì chúng ta không thể áp dụng điều này trực tiếp đến việc bố trí hình tròn drawable dốc XML, chúng ta phải áp dụng trong từ mã:

((GradientDrawable) someView.getBackground()) 
     .setGradientRadius(getResources().getDimension(
      R.dimen.yellowbadge_largeradius)); 

Điều này ghi đè trường android:gradientRadius, vì vậy bạn có thể để điều đó thành 0. Bạn vẫn không thể sử dụng (mặc dù dựa trên màn hình hoặc khác)% kích thước. Tôi áp dụng điều này cho nền của quan điểm của tôi (mà gradient drawable đã được thiết lập!) Nhưng nó cũng áp dụng cho phần tử src của ImageView, tất nhiên.

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