java - 如何在安卓上创建放大镜

标签 java android user-interface


大家好!
我正在尝试实现放大镜。 它应该使它下面的内容看起来更大。

几个小时后,我只有一个解决方案。

在我的 xml 文件中,声明如下(伪代码):

<ZoomView>
    some other content views

    <View 
        android:id="@+id/magnifier
    />
</ZoomView>

在这段代码中,ZoomView 是一个扩展 RelativeLayout 的自定义 View 。 View with magnifier id 是一个实际的放大镜,可以缩放内容。

它是这样的:


magnifier

那么代码中会发生什么。

在 ZoomView 的 onDraw 方法中,我做了这些事情。

@Override
protected void onDraw(android.graphics.Canvas canvas)
{
    Bitmap  bitmap = Bitmap.createBitmap(canvas.getWidth(), canvas.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas bitmapCanvas = new Canvas(bitmap);
    super.onDraw(bitmapCanvas);

    // some code that detects magnifier view position and size, 
    // than gets 1 area image, scale it to make in 2x bigger.
    // And then replace 2 area with this scaled image.

    // draw result on canvas
    canvas.drawBitmap(bitmap, new Matrix(), null);
}

这段代码工作正常,但速度太慢。谁能给我其他解决方案或者我该如何优化这个解决方案?

抱歉,如果有什么不对,这是我的第一个问题。

最佳答案

您走在正确的轨道上,但我认为可以通过从 onDraw 方法中取出一些处理来提高性能。如果原始大小的图像/内容是静态的,您可以在 onCreate 期间(或者更好的是,在 AsyncTask 中)轻松创建内容的放大版本,然后当移动放大镜时,您所要做的就是计算内容的哪个区域应该显示放大版本,而不是每次都尝试生成它。

如果内容是动态的,您仍然可以通过拥有 2 个内容的常量副本来执行类似的处理,一个是正常大小,一个是放大的,并且两者都不断保持最新。

您的解决方案在其他方面是正确的。我希望这会有所帮助。

关于java - 如何在安卓上创建放大镜,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10417777/

相关文章:

java - Android:如何使 ExpandableListView 中的子行不可点击?

java - 计算数组中的出现次数 (Java)

java - 如何在 Java 中将函数作为参数传递给 Callable

java - 为什么 SSL 握手会给出 'Could not generate DH keypair' 异常?

android - 尝试在 SQLite 数据库上运行 androidTest 时出现空对象引用错误

android - react native AppState 在 Android 上没有 'inactive' 状态

objective-c - 在屏幕上的某处显示自定义 UI

java - Swing 。 JTextPane 中的默认键绑定(bind)

java - Compat 前/后缀是否必须在 xml 和代码中的任何地方使用?

user-interface - 下拉列表 Windows Phone 7