2014-12-17 4 views
3

Я пытаюсь научиться создавать пользовательские виды и компоненты и уже попал в дорожный блок. Я не могу получить возможность рисования на холсте с помощью метода drawable.draw (canvas). Но он работает, если я получаю растровое изображение и рисую его с помощью метода canvas.drawBitmap().Пользовательский компонент не чертеж drawable

Существует нет ничего фантазии в коде либо:

@Override 
protected void onDraw(Canvas canvas) { 

    // drawing bitmap directly works 
    /* 
    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
    canvas.drawBitmap(bitmap, 10, 10, paint); 
    */ 

    // this doesn't work but mThumb is not null in log 
    if(mThumb != null) { 
     canvas.save(); 
     mThumb.draw(canvas); 
     Log.d("Custom component - ", "mThumb : " + mThumb); 
     canvas.restore(); 
    } 
} 

В журнале переменной mThumb содержит вытяжку. Я получаю это стандартный способ:

if(attrs != null) { 
    final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomView); 
    color = a.getColor(R.styleable.CustomView_cv_color, color); 
    thumb = a.getDrawable(R.styleable.CustomView_cv_thumb); 
    setThumb(thumb); 
    a.recycle(); 
} 

setColor(color); 

XML-для пользовательского вида является:

<me.mycustomview.MyCustomView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    app:cv_color="@android:color/holo_red_light" 
    app:cv_thumb="@drawable/ic_launcher" /> 

И в attrs.xml:

<declare-styleable name="CustomView"> 
    <attr name="cv_color" format="color" /> 
    <attr name="cv_thumb" format="reference" /> 
</declare-styleable> 

Я действительно ценю это если кто-то может указать мне в правильном направлении. Благодаря!

ответ

6

Вы можете упустить границы, попробуйте как этот

 //try setting bounds before you draw so that OS can know the area in which you want to draw.you may also pass some Rect object while setting up bounds 
     mThumb.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
     mThumb.draw(canvas); 
+0

«... это означает, что вы хотите сделать ваш' MyCustomView' внутри этого вытяжке объекта»- это не правильно. –

+0

@MikeM .: не стесняйтесь исправить меня –

+0

Метод 'Drawable # draw()' рисует Drawable на Canvas, переданный ему. OP использует его правильно. –

Смежные вопросы