【问题标题】:Zooming and Panning of view in androidandroid中视图的缩放和平移
【发布时间】:2023-04-08 06:42:01
【问题描述】:

朋友们好 我正在创建一个应用程序,我在其中放置了两个视图。第一个是imageview,另一个是我的customeview。

我正在我的自定义视图上绘制图像。我的自定义视图代码如下

public class DrawView extends ImageView{
    @SuppressWarnings("unused")
    private static final String TAG = "DrawView";
    Painter painter = new Painter();
    PathStack pathStack;
    private DrawApplication drawApplication;

    public DrawView(Context context, AttributeSet attr) {
        super(context,attr);
        setFocusable(true);
        setFocusableInTouchMode(true);
        drawApplication=(DrawApplication)context.getApplicationContext();
        pathStack=drawApplication.getPainter().getPathStack();
        painter=drawApplication.getPainter();
        setScaleType(ScaleType.MATRIX);

    }

    @Override
    public void onDraw(Canvas canvas) {
        float scaleFactor=drawApplication.getScaleFactor();
        canvas.scale(scaleFactor, scaleFactor,(float)getWidth()/2,(float)getHeight()/2);
        List<DrawingPath> currentStack=pathStack.getCurrentStack();

        for (DrawingPath drawPath : currentStack) {
            drawPath.draw(canvas, painter);

        }

    }
}

从代码中可以清楚地看到许多事情,例如在 drawapplication 上存储路径等。

现在我们决定为此视图提供缩放和平移功能。并且我的绘图也应该与后面的 imageview 一起相应地缩放。

我也应该能正确画出来。

我尝试了画布缩放,但这是最糟糕的,因为缩放后我无法绘制到触摸点,并且在屏幕上绘制的次数也减少了,导致视图绘制得更多。

在小部件上绘图也是非常冗长的任务,会导致性能下降。 请提供任何方式。

而且我正在使用 api 级别 10。

编辑1

朋友们。我有一个想法。 我必须在不同的缩放级别上绘制路径。因此,如果我们可以计算不同缩放级别的路径比,它将解决我的问题。请提供相应的帮助

编辑2

如果我们能够扩展路径,那么它可以解决我的问题

编辑3

我认为如果我们在位图上绘制它就可以实现我的目标,但我的问题是调整位图大小并提供不同缩放级别的位图滚动

【问题讨论】:

  • 对于平移,您可以使用 View 的框架进行滚动。如果您还想要平滑滚动,我已经回答了here(如果您不这样做,您可以在onDown() 中返回true 并省略mScroller/onFling() 代码)。对于缩放,我很抱歉,但我只使用ImageView

标签: android view zooming panning


【解决方案1】:

关于 SO 的类似问题:

可以在 Honeycomb (API lvl 11) 上完成,但之前不正确。

【讨论】:

  • 捏不是我的问题,但我不想创建自定义视图。我想为 android 标准视图提供缩放和平移
  • 无论你是想通过捏合还是点击按钮来实现,答案都是一样的。你不能在 API
  • 我刚刚编辑了我的问题,我们可以通过这种方式获得解决方案
  • 您好,您查看我的问题了吗
【解决方案2】:

我认为普通视图无法缩放。您可以捕获触摸事件并相应地缩放视图小部件。

【讨论】:

  • 我的意思是,MarvinLabs 已经详细指出了......这可能是唯一的方法。
  • 我刚刚编辑了我的问题,我们可以通过这种方式获得解决方案
  • 您将需要共享一些代码,并且更加具体。建议你来个简单的造型试试看。
猜你喜欢
  • 1970-01-01
  • 2014-02-24
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-19
  • 2016-07-22
  • 1970-01-01
相关资源
最近更新 更多