2016-03-19 36 views
4

Fragment adresindeki shape'un solid rengini değiştirmeye çalışıyorum.Android'de bir şeklin programatik olarak düz renk nasıl değiştirilir?

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/icon_circle_background"> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android" 
      ...> 
      <solid android:color="@color/md_cyan_400"/> 
     </shape> 
    </item> 
    <item 
     ... 
    </item> 
</layer-list> 

benim kodundan erişmek gibi olamaz ve zaten yığın taşması üzerine aşağıdaki cevaplar denedi:

Set android shape color programmatically

How to change shape color dynamically?

Change shape solid color at runtime inside Drawable xml used as background

Yok Bunlar çalıştı ya da oldukça modası geçmiş. Ben rengini değiştirmek için denemek

Fragment:

public class GameFragment extends Fragment { 
    private Theme currentTheme; 
    private Circle currentCircle; 
    private int currentOrganisationId; 
    private List<Card> circleCards; 
    private List<ImageButton> circleButtons; 
    private int viewHeight; 
    private int viewWidth; 
    private int marginCard; 
    private int[] tableStarts; 
    private RelativeLayout background; 
    private ViewTreeObserver vto; 

    public GameFragment() { 
     circleCards = new ArrayList<>(); 
     circleButtons = new ArrayList<>(); 
     tableStarts = new int[9]; 
    } 

    //... 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     final ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_game, container, false); 
     ... 
     background = setBackground(rootView); 
     circleCards = currentCircle.getCards(); 

     return rootView; 
    } 

    //... 

    private void drawCards() { 
     circleButtons = new ArrayList<>(); 
     for (Card card : circleCards) { 
      ImageButton myImageButton = new ImageButton(this.getContext()); //generate ImageButton 
      myImageButton.setId(card.getCardId()); //Set Id of button 
      myImageButton.setBackgroundResource(R.drawable.circle_card_icon); 

      //set random color to shape 
      ... 
     } 
    } 
} 
+0

Oldukça eski moda nedir? İyi çalışmalılar. –

+0

@Bob Malooga, denedim, yine de bana bu https://goo.gl/fXL4Pe kodunu verir: http://pastebin.com/KqNNTDnU – Edward

cevap

1
View v = findViewById(R.id.layout_id); 
LayerDrawable shape= (LayerDrawable)v.getBackground(); 
shape.setColor(Color.Black); 
1

kullanımını bu: bu o atmaz

GradientDrawable bgShape = (GradientDrawable)view.getBackground().getCurrent(); 
bgShape.setColor(Color.BLACK); 

.getCurrent seçilen çekilebilir layerlist

kullanımını vermek java.lang.ClassCastException: android.graphics.drawable.GradientDrawable android.gra'ya dönüştürülemiyor phics.drawable.ShapeDrawable istisnası.

Benim için mükemmel çalışıyor.