Android setCompoundDrawableWithIntrinsicBounds没有绘制任何东西…但只是有时候
我以编程方式创建了一些按钮,我以这种方式添加按钮:Android setCompoundDrawableWithIntrinsicBounds没有绘制任何东西…但只是有时候,android,android-drawable,Android,Android Drawable,我以编程方式创建了一些按钮,我以这种方式添加按钮: final Button btn = new Button(this); btn.setText(array.get(i)); btn.setTextSize(10); btn.setTextColor(getColor(R.color.white)); btn.setOnClickLi
final Button btn = new Button(this);
btn.setText(array.get(i));
btn.setTextSize(10);
btn.setTextColor(getColor(R.color.white));
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goToModule(texto);
}
});
btn.setHeight(height);
btn.setWidth(width);
btn.setOnTouchListener(parentListener);
btn.post(new Runnable() {
@Override
public void run() {
btn.setCompoundDrawablesWithIntrinsicBounds(null,getDrawableForText(texto),null, null);
btn.setPadding(0,35,0,0);
btn.setBackground(gd);
btn.setLayoutParams(params);
}
});
row1.addView(btn);
最多可绘制19个按钮。它们位于ViewFlippers中,因此用户可以在页面之间翻页
getDrawableForText方法:
private Drawable getDrawableForText(String texto) {
Drawable drawable=null;
if(texto.equalsIgnoreCase("Viajes")){
Log.i("LOG", "This drawable is the problematic one");
}
if (texto.equals(textosBotones[0])) {
drawable=getResources().getDrawable(R.drawable.vuelo,getTheme());//Viajes
} else if (texto.equals(textosBotones[1])) {
drawable=getResources().getDrawable(R.drawable.hotel,getTheme());//Hotel
} else if (texto.equals(textosBotones[2])) {
drawable=getResources().getDrawable(R.drawable.agenda,getTheme());//Agenda
/*int h = btn.getHeight()-100;
int w = btn.getWidth()-100;
drawable.setBounds( 0, 0, w, h );
Bitmap icon= BitmapFactory.decodeResource(getResources(),R.drawable.agenda);
Bitmap newbitMap = Bitmap.createScaledBitmap(icon,w,h, true);
dr = new BitmapDrawable(EventActivity.this.getResources(), newbitMap);*/
} else if (texto.equals(textosBotones[3])) {
drawable=getResources().getDrawable(R.drawable.ponentes,getTheme());//Ponentes
} else if (texto.equals(textosBotones[4])) {
drawable=getResources().getDrawable(R.drawable.documentos,getTheme());//Documentos
} else if (texto.equals(textosBotones[5])) {
drawable=getResources().getDrawable(R.drawable.ubicacion,getTheme());//Ubicaciones
} else if (texto.equals(textosBotones[6])) {
drawable=getResources().getDrawable(R.drawable.contactos,getTheme());//Contactos
} else if (texto.equals(textosBotones[7])) {
//drawable=getResources().getDrawable(R.drawable.preguntas,getTheme());//Encuestas
drawable=getResources().getDrawable(R.drawable.valoracion,getTheme());//Encuestas/valoraciones
} else if (texto.equals(textosBotones[8])) {
drawable=getResources().getDrawable(R.drawable.qr,getTheme());//Distintivo/best business
} else if (texto.equals(textosBotones[9])) {
drawable=getResources().getDrawable(R.drawable.info,getTheme());//Forum
} else if (texto.equals(textosBotones[10])) {
drawable=getResources().getDrawable(R.drawable.galeria,getTheme());//Galería
} else if (texto.equals(textosBotones[11])) {
drawable=getResources().getDrawable(R.drawable.chat,getTheme());//Chats
} else if (texto.equals(textosBotones[12])) {
drawable=getResources().getDrawable(R.drawable.muro,getTheme());//Muro
} else if (texto.equals(textosBotones[13])) {
drawable=getResources().getDrawable(R.drawable.asistentes,getTheme());//Asistentes
} else if (texto.equals(textosBotones[14])) {
drawable=getResources().getDrawable(R.drawable.twitter,getTheme());//Twitter
} else if (texto.equals(textosBotones[15])) {
drawable=getResources().getDrawable(R.drawable.twitter,getTheme());//Facebook
} else if (texto.equals(textosBotones[16])) {
drawable=getResources().getDrawable(R.drawable.twitter,getTheme());//Instagram
} else if (texto.equals(textosBotones[17])) {
drawable=getResources().getDrawable(R.drawable.qr,getTheme());//QR
} else if (texto.equals(textosBotones[18])) {
drawable=getResources().getDrawable(R.drawable.valoracion,getTheme());//Proveedores
} else if (texto.equals(textosBotones[19])){
/*drawable = DrawableCompat.wrap(getResources().getDrawable(R.drawable.trophy,getTheme()));
DrawableCompat.setTint(drawable, getColor(R.color.white));*/
/*drawable=getResources().getDrawable(R.drawable.trophy,getTheme());
Drawable wrappedDrawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(wrappedDrawable, getColor(R.color.white));
drawable=wrappedDrawable;*/
drawable=getResources().getDrawable(R.drawable.actividad, getTheme());//Actividades
}else if(texto.equals(textosBotones[20])){
drawable=getResources().getDrawable(R.drawable.noticias,getTheme());
}else{
Log.i("LOG", "Something weird happened");
}
return drawable;
}
我第一次进入此活动时,已正确绘制了可绘制表格。但是,如果我单击其中一个按钮(转到另一个活动),在新活动中,我单击转到第三个活动的按钮,如果我返回到主活动(按钮所在的位置),有一个可绘制的按钮没有绘制,它总是相同的,第一个。其余按钮的其余可绘制按钮均绘制为ok
不再重新创建主活动,它将保留在内存中。不管怎样,如果我再画一次,同样的奇怪行为也会发生
我很迷茫,因为第三个活动对第一个活动没有任何影响
有人能告诉我发生了什么
多谢各位
如果你需要更多的细节,请告诉我
编辑:
在第三个活动中,我做了如下工作:
private void getArrivalsFromJSON(String resp) {
arrivals=new ArrayList<>();
ArrivalModel all=new ArrivalModel();
all.setDestination("");
all.setTerminal("ALTTODO");
all.setType("");
arrivals.add(all);
try {
JSONObject json=new JSONObject(resp);
JSONArray data=json.getJSONArray("data");
for(int i=0;i<data.length();i++){
JSONObject obj=data.getJSONObject(i);
ArrivalModel arrival=new ArrivalModel();
arrival.setDestination(obj.getString("destination"));
arrival.setTerminal(obj.getString("terminal"));
arrival.setType(obj.getString("type"));
arrivals.add(arrival);
}
generateLayout();
} catch (JSONException e) {
e.printStackTrace();
}
}
for(int i=0;i<data.length()-7;i++)
private void getArrivalsFromJSON(字符串resp){
arrivals=新的ArrayList();
ArrivalModel all=新到达的模型();
全部。设置目的地(“”);
全部。setTerminal(“ALTTODO”);
all.setType(“”);
到达。添加(全部);
试一试{
JSONObject json=新的JSONObject(resp);
JSONArray data=json.getJSONArray(“数据”);
对于(int i=0;i我发现了错误。与内存或其他性能问题无关
发生的事情是,在第三个活动中,我使用了我在按钮中使用的相同.png,但我改变了它的颜色:
d.setColorFilter(new PorterDuffColorFilter(Color.parseColor(color), PorterDuff.Mode.MULTIPLY));
因此,当我返回到第一个活动,并试图绘制可绘制表格时,它正在绘制,但颜色发生了变化。鉴于按钮颜色和我正在更改可绘制表格的颜色相同,似乎无法绘制可绘制表格;事实上,它正在绘制,但不可见。我发现了错误。否t与内存或其他性能问题有关
发生的事情是,在第三个活动中,我使用了我在按钮中使用的相同.png,但我改变了它的颜色:
d.setColorFilter(new PorterDuffColorFilter(Color.parseColor(color), PorterDuff.Mode.MULTIPLY));
所以,当我回到第一个活动中,试图绘制可绘制图形时,它正在绘制,但颜色发生了变化。考虑到按钮的颜色,以及我更改可绘制图形时使用的颜色是相同的,看起来可绘制图形没有被绘制;事实上,它正在绘制,但不可见