jor*_*nti 6 android android-ui android-listview android-imageview android-gridview
我目前正在使用包含ImageViews的GridView,并希望我的图像背后有阴影.例如,在网格中可能有15个图像随时可见.在假设我希望我的屏幕以50fps渲染以显得平滑的情况下工作,我的数学表明我希望每个ImageView的总绘制时间不会差于大约1.3ms.
我看了一下Romain Guy如何在他的Shelves应用程序中做阴影:http: //code.google.com/p/shelves/source/browse/trunk/Shelves/src/org/curiouscreature/android/shelves/util/ ImageUtilities.java
这似乎有道理,所以我创建了以下类:
public class ShadowImageView extends ImageView {
private static final int SHADOW_RADIUS = 8;
private static final int SHADOW_COLOR = 0x99000000;
private static final Paint SHADOW_PAINT = new Paint();
static {
SHADOW_PAINT.setShadowLayer(SHADOW_RADIUS / 2.0f, 0.0f,
0.0f, SHADOW_COLOR);
SHADOW_PAINT.setColor(0xFF000000);
SHADOW_PAINT.setStyle(Paint.Style.FILL);
}
public ShadowImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void onDraw(Canvas canvas) {
final int containerWidth = getMeasuredWidth();
final int containerHeight = getMeasuredHeight();
canvas.drawRect(
SHADOW_RADIUS / 2.0f,
SHADOW_RADIUS / 2.0f,
containerWidth - SHADOW_RADIUS / 2.0f,
containerHeight - SHADOW_RADIUS / 2.0f,
SHADOW_PAINT);
}
}
Run Code Online (Sandbox Code Playgroud)
(显然这只是给了我带阴影的黑色矩形,但足以让我对性能进行初步猜测.)
滚动网格非常不稳定,所以我检查了我在层次结构查看器中获得的绘制时间:每个ImageView大约3.5ms.这最多只能达到19fps左右.
但是,如果我删除了setShadowLayer()语句,则层次结构查看器会显示每个ImageView大约0.2ms的绘制时间.
如果我忘了所有关于drawRect()而是创建一个带阴影边的九个补丁,在onDraw()中调用setBackgroundResource(R.drawable.my_nine_patch),我看到每个ImageView的绘制时间大约为1.5ms.
使用带有shadowLayer的Paint是否存在已知的性能问题?我在上面的代码中做了些蠢事吗?
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |