2013-12-09 4 views
0

Я пытаюсь нарисовать jpg на холсте в onDraw(), однако тип Bitmap не может быть доступен для рисования (не имеет метода .draw). Моя цель - иметь jpeg, который можно перемещать на экране с помощью касания/перетаскивания. Как мне это сделать?Рисование произвольного jpeg to Canvas

Вот мой конструктор (где я пройти путь изображения к просмотру)

public TouchViewClass(Context context, AttributeSet attrs, int defStyle, String picPath) { 
    super(context, attrs, defStyle); 
    this.picPath=picPath; 
} 

Вот мой OnDraw

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    Bitmap myImg = BitmapFactory.decodeFile(picPath); 
    canvas.save(); 
    canvas.translate(mPosX, mPosY); 
    //Here is where the bitmap should be drawn 

    canvas.restore(); 
} 
+0

Любопытное перепутались, что Я бы поставил вопрос по моему вопросу. Может кто-то, пожалуйста, помогите мне понять, что было не так с этим вопросом? – TheGeekNess

ответ

4

Прежде всего, я бы не рекомендовал декодировать файл растрового изображения в onDraw(). Этот метод называется каждым отдельным фреймом, поэтому процесс рисования будет очень медленным. Вам необходимо заранее декодировать файл (в вашем случае в вашем конструкторе) и повторно использовать это растровое изображение в onDraw.

Что касается фактического рисования растрового изображения, вы можете легко нарисовать растровое изображение, вызвав метод Canvas.drawBitmap().

Так в основном вы даже не нужно переводить холст - вы можете указать место назначения непосредственно:

canvas.drawBitmap(bmp, mPosX, mPosY, null); 
+0

AH вы знаете, что у меня было это, но он не работал с переводом все еще там. Спасибо – TheGeekNess

0

Я хотел бы изменить неисправную реализацию подверженную что-то вроде:

public class TouchViewClass extends View{ 

    private Bitmap myImg; 
    private float mPosX = 0; 
    private float mPosY = 0; 
    private Paint paint = new Paint(); 

    public float getmPosX() { 
     return mPosX; 
    } 

    public void setmPosX(float mPosX) { 
     this.mPosX = mPosX; 
    } 

    public float getmPosY() { 
     return mPosY; 
    } 

    public void setmPosY(float mPosY) { 
     this.mPosY = mPosY; 
    } 

    /** 
    * So you can inflate from XML 
    * @param context 
    * @param attrs 
    */ 
    public TouchViewClass(Context context, AttributeSet attrs) { 
     super(context, attrs); 

    } 

    /** 
    * So you can create in code 
    * @param context 
    * @param attrs 
    * @param picPath 
    */ 
    public TouchViewClass(Context context, AttributeSet attrs, String picPath) { 
     super(context, attrs); 

     setPicPath(context, picPath); 
    } 

    public void setPicPath(Context context, String picPath){ 
     if(!TextUtils.isEmpty(picPath)){ 
      myImg = BitmapFactory.decodeFile(picPath); 
     }else{ 
      Resources resources = context.getResources(); 
      myImg = BitmapFactory.decodeResource(resources, R.drawable.ic_launcher); 
     } 

    } 

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

     canvas.drawBitmap(myImg, mPosX, mPosY, paint); 
    } 

} 
+0

Почему вам нужен весь класс «BitmapDrawable», если вы используете только Bitmap? –

+0

Полностью согласен с вами. Нет необходимости обертывать растровое изображение. –