3

キャンバスを描画 SCALED ビューにスケーリングしようとすると、ビューは実際にスケーリングされますが、ビューがクリップされます。(おそらくレイアウトパラメータのため?)

public void onDraw(Canvas canvas) {
    canvas.scale(2f, 2f);
    view.draw(canvas);
}

シンプルなイメージ:

ここに画像の説明を入力

たとえば、このボタンをクリックすると、新しい onDraw が呼び出された後の画像:

ここに画像の説明を入力

キャンバスが拡大縮小されるとき、ボタンはフルサイズである必要があります。それを解決する方法はありますか?

の ps 呼び出し

view.invalidate();
view.requestLayout();

役に立ちません。


MyDragShadowBuilderビューをドラッグしたときにビューのサイズを 2 倍にしたいので、使用しています。

private final class MyDragShadowBuilder extends DragShadowBuilder {

        public MyDragShadowBuilder(View view) {
            super(view);
        }

        @Override
        public void onDrawShadow(Canvas canvas) {
            final View view = getView();
            if (view != null) {
                canvas.scale(2f, 2f);
                view.draw(canvas);
            } else {
                Log.e("DragShadowBuilder", "Asked to draw drag shadow but no view");
            }
        }

WRAP_CONTENT レイアウト プロパティを使用して、絶対レイアウトの実装にビューを追加します。

4

1 に答える 1

4

私は同じトラブルに遭遇しました。しばらくして、それを機能させる方法を見つけました:)これにより、元のビューが4倍に拡大されます。

private static class MyDragShadowBuilder extends View.DragShadowBuilder {

    private static final int SCALING_FACTOR = 4;

    public MyDragShadowBuilder(View view) {
        super(view);
    }

    @Override
    public void onProvideShadowMetrics(Point shadowSize, Point shadowTouchPoint) {
        View v = getView();
        final int width = v.getWidth() * SCALING_FACTOR;
        final int height = v.getHeight() * SCALING_FACTOR;
        shadowSize.set(width, height);
        shadowTouchPoint.set(width / 2, height / 2);
    }

    @Override
    public void onDrawShadow(Canvas canvas) {
        canvas.scale(SCALING_FACTOR, SCALING_FACTOR);
        getView().draw(canvas);
    }

}
于 2014-08-06T08:17:29.473 に答える