画面サイズよりも大きいキャンバスに描画する方法のサンプルコードを使用した実際の例を探しています(現在、通常どおりに描画しており、画面サイズの外側を表示できません)。画面をスクロール/パンしてキャンバス全体を表示できるようにすることで、さらにストレスがかかります。これ以上の情報が必要な場合はコメントしてください。
更新:ここで私の答えを見つけましたタッチイベントを含むキャンバスの画像
画面サイズよりも大きいキャンバスに描画する方法のサンプルコードを使用した実際の例を探しています(現在、通常どおりに描画しており、画面サイズの外側を表示できません)。画面をスクロール/パンしてキャンバス全体を表示できるようにすることで、さらにストレスがかかります。これ以上の情報が必要な場合はコメントしてください。
更新:ここで私の答えを見つけましたタッチイベントを含むキャンバスの画像
私のバージョンはMonodroidから変換されていますが、実装はほぼ同じに見えるはずです。(私はそれをJavaに戻してみました、それが正確でない場合はお詫びします)
画面の外に描画するには、好きな場所に描画するだけで、画面の外に描画されます。秘訣は、ズームとパンでそれを確認することです。ビューをズームするには、ScaleGestureDetector.IOnScaleGestureListenerを実装し、以下のようにonScaleメソッドを実装する必要があります。
パンの場合は、とにかくズームに必要なonTouchEventを実装する必要があります。
private float _scaleFactor;
private float _xoffset;
private float _yoffset;
@override
public bool onScale(ScaleGestureDetector detector){
_scaleFactor *= detector.ScaleFactor;
_scaleFactor = Math.Max(0.1f, Math.Min(_scaleFactor, 5.0f));
invalidate();
return true;
}
@override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.save();
canvas.scale(_scaleFactor, _scaleFactor);//for zoom
canvas.translate(_xoffset, _yoffset);//for pan
//DO NORMAL DRAWING HERE
canvas.restore();
}
@override
public bool onTouchEvent(MotionEvent e){
switch (e.action){
case MotionEvent.ACTION_DOWN:{
_prevx = e.getX();
_prevy = e.getY();
}
break;
case MotionEvent.ACTION_UP:{
_xoffset += e.getX() - _prevx;
_yoffset += e.getY() - _prevy;
invalidate();
_prevx = e.getX();
_prevy = e.getY();
}
break;
}
return _scaleGestureDetector.onTouchEvent(e);
}
注:このコードはカスタムVIEWオブジェクト用です。したがって、Viewから継承し、IOnScaleGestureListenerを実装します。
キャンバス全体をScrollView内に配置するだけです。このようにして、Androidがすべてのスクロールを処理します。ただし、ユーザーがスクロール以外のCanvasを操作できるようにする場合は、ScrollViewからのタッチイベントの一部をインターセプトする必要があります。これを行う例はここにあります。
@Override
public void onCreate(Bundle savedInstanceState)
{
CustomView customView;
ScrollView scroll_view;
HorizontalScrollView h_scroll_view;
super.onCreate(savedInstanceState);
scroll_view = new ScrollView(this);
h_scroll_view = new HorizontalScrollView(this);
customView = new CustomView(this);
scroll_view.addView(customView);
h_scroll_view.addView(scroll_view);
setContentView(h_scroll_view);
}
public class CustomView extends View
{
private Paint paint;
Context app_context;
public CustomView(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.GRAY);
app_context = context;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int width = 1000;
int height = 1200;
setMeasuredDimension(width, height);
}
@Override
public void onDraw(Canvas canvas)
{
// ToDo: Put drawing code in here
}
}
}
}