Andrioid - 无法动态重新创建Canvas View

时间:2015-09-30 10:51:23

标签: android android-canvas android-gridview ondraw

我正在尝试显示在上一个屏幕中绘制的画布图像的网格视图。我在第一个屏幕中绘制了一组不同的视图,这些视图会发生变化,这些画布将根据用户的操作重新绘制。我有5个心形的画布视图,我对每个心脏都使用不同的视图,这意味着我没有使用同一个类来绘制五颗心,而是我使用5个不同的类来为5个不同的心。用户点击时,这些心脏将充满颜色。          在下一页中,我试图只查看上一页中绘制的内容,并且此处不涉及任何操作,因为此页面仅用于查看目的。 这个页面可以包含N个心脏数量,但以前的页面只有5个心脏即可。为此,我在显示页面中使用单个视图来显示所有的心。但我得到的只是最后一颗心,所有其他以前的心都被覆盖了。

我填充心脏的想法是在它上面绘制一个矩形并剪切路径。

我的onDraw是:

        path.moveTo(left_x_moveto, left_y_moveto);
        path.cubicTo(left_x1,left_y1,left_x2,left_y2,left_x3,left_y3);

        path.moveTo(left_x_moveto, left_y_moveto);
        path.cubicTo(right_x1,right_y1,right_x2,right_y2,right_x3,right_y3);


        this.setDrawingCacheEnabled(true);
        rect = new Rect((int)(canvas.getWidth()*.10),(int)(canvas.getHeight()*filled_amount),(int) canvas.getWidth(), (int) canvas.getHeight());

        canvas.clipPath(path);

        paint.setColor(Color.WHITE);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawPath(path, paint);
        canvas.drawRect(rect, rect_paint);

        heart_outline_paint.setColor(getResources().getColor(R.color.heart_outline_color)); // Change the boundary color
        heart_outline_paint.setStrokeWidth(15);
        heart_outline_paint.setStyle(Paint.Style.STROKE);
        canvas.drawPath(path, heart_outline_paint);

我将观点添加到观看者的角色中的部分:

public static ArrayList<View> heart_views = new ArrayList<View>();
 for(int i=0;i<dbHelper.getHeartPercentagesForSummary().size();i++)
        {
            SummaryHeartShape.filled_amount = .90 - (dbHelper.getHeartPercentagesForSummary().get(i)*0.008);
            SummaryHeartShape summary_heart_shape = new SummaryHeartShape(getActivity());
            summary_heart_shape.invalidate();
            heart_views.add(summary_heart_shape);
        }

我假设在创建onDraw()类的实例时将调用SummaryHeartShape

正如您所看到的,每次我将矩形填充到由SummaryHeartShape.filled_amount给出的不同高度时,此静态变量在rect的onDraw中指定为

rect = new Rect((int)(canvas.getWidth()*.10),(int)(canvas.getHeight()*filled_amount),(int) canvas.getWidth(), (int) canvas.getHeight());

所以这基本上意味着将根据我给出的高度绘制矩形,并且因为它每次都不同,我应该接收具有该矩形高度的画布视图,但每次我得到相同高度的相同矩形。

我的屏幕,用户可以填充内心 - Filling Heart

我的屏幕,用户可以在其中查看已填充的内容 - Summary of Hearts

你可以清楚地看到第一页的心被填满了,但第二页的心只是显示了最后的心。

我已经检查了传递给SummaryHeartShape.filled_amount的值,它总是不同但是即使我心碎了!!!!

有人可以帮助我修理我的心吗?请随时提出疑问,或者我是否想要更清楚。

0 个答案:

没有答案