我试图在onDraw()中绘制一个jpg到画布,但是Bitmap类型似乎不是可绘制的(没有.draw方法)。我的目标是让一个可以在屏幕上移动的jpeg触摸/拖动。我该如何画这个?
这是我的构造函数(我将图像路径传递给视图)
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 :(得分:4)
首先,我不建议将文件解码为onDraw()
中的位图。每个帧都会调用此方法,因此绘制过程将非常缓慢。您需要预先解码文件(在您的构造函数中),并在onDraw
中重用此位图。
对于实际的绘图位图,您可以通过调用Canvas.drawBitmap()方法轻松绘制位图。
所以基本上你甚至不需要翻译画布 - 你可以直接指定目的地:
canvas.drawBitmap(bmp, mPosX, mPosY, null);
答案 1 :(得分: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);
}
}