我有一堆构成单个图像的图块,可以根据要求呈现(通过屏幕上可见的总图像部分).合成图像明显大于屏幕.每个图块紧邻其邻居定位,以创建单个图像的幻觉(单个图像,如果不是平铺,则会太大并且具有OOM错误).
这些是FrameLayout中的ImageViews,位于top/leftMargin.
目标API 2.2/SDK 8
我正在尝试缩放整个图像以响应用户事件(按下按钮,捏合等).
显然setScale在API 11之前不可用.我尝试在frameLayout的onDraw中使用canvas.scale和setWillNotDraw(false),并且正在调用onDraw,但是没有应用缩放(我假设因为布局本身没有任何图形信息?我曾经假设它也会渲染它的孩子,但我想不会除非我在这里也做错了.)
我想我可以遍历每个图块并独立缩放它,但每次都需要重新定位每个图块.
我必须认为有一种方法可以扩展父视图(ViewGroup?),以便它的所有子节点也可以缩放(就像负责管理GUI的所有其他语言一样).我错过了什么?
谢谢
作为参考,上面提到的方法(使用父ViewGroup的onDraw)确实有效.我在转换之前一直使用canvas.save()和之后的canvas.restore()(基于一些例子),这是不正确的.
以下是FrameLayout的通用子类,它将扩展它的子级
package com.whatever.layouts;
import android.content.Context;
import android.graphics.Canvas;
import android.widget.FrameLayout;
public class ScalingFrameLayout extends FrameLayout {
private float scale = 1;
public ScalingFrameLayout(Context context) {
super(context);
setWillNotDraw(false);
}
public void setScale(float factor){
scale = factor;
invalidate();
}
public float getScale(){
return scale;
}
@Override
public void onDraw(Canvas canvas){
canvas.scale(scale, scale);
super.onDraw(canvas);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5218 次 |
| 最近记录: |