4

我正在为 Android 开发一个应用程序,一个小型记事本应用程序。在我的应用程序中,我使用 Gridview 创建一个 2*X 大小的网格,并且在每个单元格中我都有一个 LinearLayout 调用 AbstractNote,它的任务是显示应用程序中每个保存注释的预览。

我的 AbstractNote 有一个稍微旋转的背景图像,以更漂亮地显示预览。但是我的问题是,当我旋转图像时,其中一些图像落在了 AbstractNote 区域之外,我找不到一个很好的方法来展示它。

我尝试使用View.setAnimation(...)它并且它可以工作,但给我粗糙的图像和文本,我尝试创建一个自定义的 Drawable(设置为AbstractNote.setBackgroundDrawable(...)),它给我平滑的图像但不显示完整的图像。

请注意,我的目标 android 是 2.1,我不使用View.setRotation(...)

使用View.setAnimationfor 执行此操作,但获得粗糙的图像和文本

使用自定义可绘制对象,但不能在单元格外部进行绘制。

如果有人知道如何修复它,通过修复尝试 1 中粗糙的图像和文本或如何在尝试 2 中在单元格外绘制图像,我将非常感激。

4

1 回答 1

5

我终于找到了问题的解决方案,解决方案不是很好但工作,想法是绘制单元格项目直接在 GridView 上绘制背景而不是 GridView childen/item

我创建一个新的 GridView 为:

public class NoteGridView extends GridView {
@Override
protected void dispatchDraw(Canvas canvas) {
    final int count = getChildCount();
    if (count > 0) {
        for (int i = 0; i < this.getChildCount(); i++) {
            // For each of my childen draw it backgrund that allow to draw bg that is bigger then cell.
            View childAt = this.getChildAt(i);
            if (childAt instanceof AbstractNote) {
                final AbstractNote note = (AbstractNote) childAt;
                // Set the zero point to the start of the childen, then call the childen draw methods.
                canvas.save();
                canvas.translate(childAt.getLeft(), childAt.getTop());
                note.drawBackground(canvas);
                canvas.restore();
            }
        }
    }
    super.dispatchDraw(canvas);
}
}

在我的孩子们中,AbstractNote我添加了方法drawBackground,这就是我要在我AbstractNote的背景中绘制的内容,现在在 GridView 画布上绘制,该画布比我在其中的小画布大得多AbstractNote

于 2012-09-07T13:24:22.757 回答