gpt4 book ai didi

Android:这不是绘制 Canvas 的方式吗?

转载 作者:行者123 更新时间:2023-11-29 01:52:18 24 4
gpt4 key购买 nike

我是否误解了 Canvas 的平移和缩放应该如何工作?我创建了一个可以拖动和缩放的自定义 View ,但它在我设置的范围内。我以为翻译 Canvas 会重绘边界?我希望能够在整个屏幕上拖动和缩放图像,而不是在视口(viewport)中!我假设平移 Canvas 会调整视口(viewport)。

我是不是想错了?

@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
canvas.translate(mPosX, mPosY);
canvas.scale(mScaleFactor, mScaleFactor);
mIcon.draw(canvas);
canvas.restore();
}

这就是我创建 View 的方式。所以基本上它被卡在这个 250 x 250 的盒子里。我需要 View 来实际拖拽。我觉得我在做一些愚蠢的事情,但我无法产生我正在寻找的行为。

    MultiTouchImageView view = new MultiTouchImageView(this);
view.setLayoutParams(new RelativeLayout.LayoutParams(250, 250));

最佳答案

您可以设置边距以在布局中移动 View 。我创建了 test project为了展示这个想法,它看起来像这样:

public class DragView extends View {

private float mLastTouchX;
private float mLastTouchY;

private float mDeltaX;
private float mDeltaY;

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

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

private void init() {
setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
final int action = event.getAction();

mLastTouchX = event.getRawX();
mLastTouchY = event.getRawY();

switch (action) {
case MotionEvent.ACTION_DOWN: {
RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams) getLayoutParams();
mDeltaX = mLastTouchX - lParams.leftMargin;
mDeltaY = mLastTouchY - lParams.topMargin;

break;
}
case MotionEvent.ACTION_MOVE: {
mLastTouchX = event.getRawX();
mLastTouchY = event.getRawY();

final RelativeLayout.LayoutParams params = (LayoutParams) getLayoutParams();
params.leftMargin = (int) (mLastTouchX - mDeltaX);
params.topMargin = (int) (mLastTouchY - mDeltaY);
setLayoutParams(params);

break;
}
}

return true;
}
});
}

}

关于Android:这不是绘制 Canvas 的方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17170676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com