Câu hỏi Thay đổi màu đường viền hình dạng khi chạy


Tôi có hình dạng này trong thư mục drawable của mình:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="5dp" />
    <solid android:color="#ffffff" />
    <stroke android:width="2dp" android:color="#B5B5B5"/>
</shape>

Điều này xác định một hình chữ nhật với các góc tròn và tôi có thể áp dụng nó làm nền cho bất kỳ bảng điều khiển như thế này: android: background = "@ drawable / round_corner_shape".

Ở đây có câu hỏi: Tôi có vài bảng trên ứng dụng của tôi, với hình dạng giống như nền, nhưng đối với mỗi hình dạng tôi muốn có một màu viền (nét) khác nhau. Tôi không muốn tạo ra 3 hình dạng, sự khác biệt duy nhất là màu đột quỵ. Có thể thay đổi khi chạy giá trị hành trình không?


25
2017-11-27 13:39


gốc


thats một cái gì đó để suy nghĩ về, câu hỏi hay. +1 - Vinay Wadhwa


Các câu trả lời:


Tôi đã từng gặp vấn đề tương tự. Trong trường hợp của tôi, tôi đã có GridView, các mục trong lưới có thể có màu đường viền được thay đổi bởi người dùng khi chạy.

Vì vậy, trong GridviewAdapter cho lưới đó, tôi đã làm như sau trong phương thức getView (cái tạo ra khung nhìn cho bộ điều hợp)

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    convertView = inflater.inflate(R.layout.griditem, null);
    GradientDrawable gradientDrawable = (GradientDrawable) convertView.getBackground(); 

    gradientDrawable.setStroke(2, mColor); 
    convertView.invalidate();
    return convertView;
}

mColor là một int đại diện cho màu sắc, giống như chúng ta làm trong các tệp xml. Trong mã java, thay vì "#", chúng tôi sử dụng "0x" để xác định nó theo định dạng AARRGGBB. Ví dụ: sử dụng 0xFF000000 cho màu đen mờ đục là 100% và 0xFF0000FF cho màu xanh đục lỗ 100%. Giải thích điều này ở đây vì google api 'helpfully' nói rằng màu int là "màu của đột quỵ".

Điều này giải quyết vấn đề của tôi ... Tôi đoán bạn có thể thử một cái gì đó tương tự cho trường hợp của bạn.


17
2018-02-23 18:34





Chào bạn có thể thử tạo nền của bạn trong thời gian chạy, sau đó bạn có thể thay đổi nó bất cứ khi nào bạn muốn.

RoundRectShape rect = new RoundRectShape(
  new float[] {30,30, 30,30, 30,30, 30,30},
  null,
  null);
ShapeDrawable bg = new ShapeDrawable(rect);
bg.getPaint().setColor(0x99FFFFFF);
view.setBackgroundDrawable(bg);

1
2017-11-27 13:50



Nhưng trong ví dụ của bạn, tôi không sử dụng mã xml hiện có của mình. Tôi muốn xác định một hình dạng (bán kính góc, nền, chiều rộng stoke) trong xml (hoặc cách khác, nhưng với tất cả các tham số ở trên) và chỉ thay đổi màu sắc nét nếu tôi cần. Đây là câu hỏi, nếu bạn có thể giúp đỡ. - Zelter Ady
đã làm cho tôi. nhưng đối với mục đích sao chép và dán, nó phải là bg.getPaint().setColor(0x99FFFFFF); - bass.t
màu sắc nền, không đột quỵ. - lalitm