Проблема с пользовательским представлением, использующим LayerDrawable, ничего не отображающим - PullRequest
0 голосов
/ 01 августа 2011

У меня возникла проблема при расширении класса View, XML работает правильно, как я пробовал с ImageView, но не с моим пользовательским классом ...

BubbleView.java

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.drawable.LayerDrawable;
import android.view.View;

public class BubbleView extends View {

    LayerDrawable rootBubble;

    public BubbleView(Context context) {           
            super(context);

            Resources res = this.getResources();
            rootBubble = (LayerDrawable) res.getDrawable(R.drawable.bubble);

    }

    @Override
    protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            rootBubble.draw(canvas);

    }


}

bubble.xml (в папке res / drawable-mdpi)

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
  <shape
   android:shape="rectangle">
        <solid android:color="#FFFF0000" />
        <size android:width="100px" android:height="100px" />
        <padding android:bottom="1dp"/>
    </shape>
</item>

<item>
  <shape
   android:shape="oval">
        <solid android:color="#FFFFFFFF" />
        <size android:width="100px" android:height="100px" />
    </shape>
</item>

</layer-list>

основная деятельность

public class VisualManagerActivity extends Activity {


  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);

     LinearLayout main = new LinearLayout(this);      
     main.addView(new BubbleView(this));      
     setContentView(main);
  }
}

спасибо!

Ответы [ 2 ]

2 голосов
/ 01 августа 2011

LayerDrawable является подклассом Drawable, поэтому вам все равно нужно назначить свой Drawable для View.

Я бы рекомендовал BubbleView расширить ImageView вместо View для вашего пользовательского класса.Таким образом, вы можете повторно использовать свой рисованный объект в любом макете, как вы хотите, как в основной деятельности.

public class BubbleView extends ImageView {

    public BubbleView(Context context) {           
        super(context);
        init( context );
    }

    public BubbleView(Context context, AttributeSet attrs) {           
        super(context, attrs);
        init( context );
    }        

    public BubbleView(Context context, AttributeSet attrs, int defStyle) {           
        super(context, attrs, defStyle);
        init( context );
    }

    private void init(Context context){
        Resources res = this.getResources();
        setImageDrawable(res.getDrawable(R.drawable.bubble));

        /* Any other initialization */

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        /* Any other drawing functionality */

    }
}

Помогает ли это?

0 голосов
/ 21 апреля 2015
protected void onDraw(Canvas canvas)
{
    super.onDraw(canvas);

    paint = new Paint();

    paint.setColor(Color.WHITE);


    Rect bounds = new Rect();
    paint.getTextBounds(name, 0, name.length(), bounds);

    LayerDrawable layerDrawable = (LayerDrawable) resources.getDrawable(R.drawable.your_drawble);
    Bitmap b = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
    layerDrawable.setBounds(0, 0, getWidth(), getHeight());
    layerDrawable.draw(new Canvas(b));

    canvas.drawBitmap(b,0,0,paint);}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...