A imagem não é exibida porque você não especificou os limites; portanto, você tem duas opções aqui.
1º método
Use o setCompoundDrawablesWithIntrinsicBounds
método, como mostrado abaixo
Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn. setCompoundDrawablesWithIntrinsicBounds(myDrawable, null, null, null);
2º Método
Você pode aplicar limites ao drawable antes de aplicar ao TextView, conforme mostrado abaixo
Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
myDrawable.setBounds( 0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());
btn.setCompoundDrawables(myDrawable, null, null, null);
É isso aí.
(..)WithIntrinsicBounds
precisa ser chamada. Em uma nota lateral,padding
para o Drawable composto deve ser definido após esta chamada para causar efeito #