如何在多点触控下缩放整个活动界面?

35

问题:

对于图片和Web视图,放大缩小都很容易。但我想要放大整个活动(Activity)。我该如何实现呢?

这里提供线框图:

Activity的线框图

从这张图中,您可以了解到我所需的内容。

请求:

如果您有任何解决方案,请分享。
谢谢。


2
你尝试过将变换矩阵应用于根活动视图而不是ImgeView吗? - Leonidos
你想要缩放的活动里有什么?请发布你的XML。 - Clyde
你的活动中是否包含按钮和操作?还是只是一种显示? - Sherif elKhatib
@SherifelKhatib 是的,我的Activity包含TextView、EditText、ImageView和Buttons。 - Darshak
@SherifelKhatib 我需要滚动ScrollView并且还需要按按钮。所以,如果可能的话,请告诉我。 谢谢。 - Darshak
显示剩余2条评论
2个回答

17

你可以通过缩放根活动视图来模拟缩放。以下是一些起始代码:

View v = findViewById(android.R.id.content); // get reference to root activity view
v.setOnClickListener(new OnClickListener() {
    float zoomFactor = 1.5f;
    boolean zoomedOut = false;

    @Override
    public void onClick(View v) {
        if(zoomedOut) { 
            // now zoom in
            v.setScaleX(1);
            v.setScaleY(1);
            zoomedOut = false;
        }
        else {
            v.setScaleX(zoomFactor);
            v.setScaleY(zoomFactor);
            zoomedOut = true;
        }
    }
});

请注意,该活动将在单击时缩放,而不是双击缩放。此外,您可能希望为缩放添加动画效果。查看Property Animation了解如何实现此目的。

[编辑] 对于旧的API级别,您可以使用ScaleAnimation。您还可以设置动画的持续时间。但是,一个主要的警告是它只修改视图的外观,但实际视图并没有改变。

if(zoomedOut) { // zoom in
    ScaleAnimation anim = new ScaleAnimation(1f, 1.5f, 1f, 1.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    anim.setDuration(500);
    anim.setFillAfter(true);
    v.startAnimation(anim);
    zoomedOut = false;
}
else {
    ScaleAnimation anim = new ScaleAnimation(1.5f, 1f, 1.5f, 1f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
    anim.setDuration(500);
    anim.setFillAfter(true);
    v.startAnimation(anim);
    zoomedOut = true;

1
我想这是正确的。可以使用ScaleAnimation来实现缩放,它适用于每个API级别。缺点是它只修改每个视图绘制的位置,而不是实际的View本身。 - Barney
1
@Barney Hsiao我相信这段代码一定会对我起作用。我会尝试运行这段代码。提前感谢您。 - Darshak

1
您可以使用 setScaleXsetScaleY 来缩放 完整的活动视图
然后,您需要使用 setPivotXsetPivotY 设置枢轴点。
以下是使用多点触控进行整个活动缩放的详细示例:
1)MultiTouch 用于整个活动。
2)Zooming 完全查看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接