我在创建一个绘制矩形的CustomView时遇到问题,并且可以通过其角重新调整大小。
以下是我的代码。
public class CustomView extends View {
Canvas canvas;
private Context mContext;
private Rect rectObj;
private Paint rectPaint;
private Matrix transform;
public CustomView(Context context) {
super(context);
mContext = context;
initView();
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
initView();
}
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void initView() {
rectPaint = new Paint();
rectPaint.setColor(Color.parseColor("#55000000"));
setFocusable(true); // necessary for getting the touch events
canvas = new Canvas();
// setting the start point for the balls
rectObj = new Rect(100, 100, 200, 200);
// Create a matrix to do rotation
transform = new Matrix();
}
@Override
public void onDraw(Canvas canvas) {
// This is an easy way to apply the same transformation (e.g.
// rotation)
// To the complete canvas.
canvas.setMatrix(transform);
// With the Canvas being rotated, we can simply draw
// All our elements (Rect and Point)
canvas.drawRect(rectObj, rectPaint);
}
}
当我运行此程序时,输出结束。
在图片中显示时,我的“矩形”的左上角 100,100 但是当我在屏幕上触摸“矩形的左上角”时,< strong> xy 150,76 或与原始图纸不匹配的内容。
我必须使用 canvas.setMatrix(transform)在下一阶段旋转该矩形。
这段代码出了什么问题?
答案 0 :(得分:1)
在方法onDraw(Canvas canvas)
中,您应该做的一件事是调用方法super.onDraw(cavas)
,之后不要做'canvas.setMatrix(transform);'你应该做'canvas.concat(transform);'因为画布有一个初始Matrix
,其中保存了一些值。此外,如果您只需要旋转或翻译该矩形,则可以通过执行canvas.rotate(degree)
来旋转和翻译画布。