Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在旋转画布上绘制(设置diry区域)_Android_Canvas_Rotation - Fatal编程技术网

Android 在旋转画布上绘制(设置diry区域)

Android 在旋转画布上绘制(设置diry区域),android,canvas,rotation,Android,Canvas,Rotation,我正在尝试创建一个custon视图组,该视图组将显示其子视图。它似乎工作良好,除了不是整个画布正在重画-似乎只有未旋转的孩子覆盖的部分正在重画 有没有办法强制在整个画布上绘制(类似于将整个边界框设置为脏的) 我的视图组: public class RotationGroup extends ViewGroup { private int rotation = 90; public RotationGroup(Context context, AttributeSet attrs

我正在尝试创建一个custon视图组,该视图组将显示其子视图。它似乎工作良好,除了不是整个画布正在重画-似乎只有未旋转的孩子覆盖的部分正在重画

有没有办法强制在整个画布上绘制(类似于将整个边界框设置为脏的)

我的视图组:

public class RotationGroup extends ViewGroup 
{
    private int rotation = 90;
    public RotationGroup(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public RotationGroup(Context context) {
        super(context);
    }

    @Override
    protected void dispatchDraw(Canvas canvas)
    {
        canvas.save(Canvas.MATRIX_SAVE_FLAG);
        canvas.rotate(rotation, getWidth() * 0.5f, getHeight() * 0.5f);
        super.dispatchDraw(canvas);
        canvas.restore();
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {

        final int count = getChildCount();

        int maxHeight = 0;
        int maxWidth = 0;

        for (int i = 0; i < count; i++)
        {
            final View child = getChildAt(i);
            if( child!=null)
            {
                if( rotation==90 || rotation==-90)
                {
                    measureChild(child, heightMeasureSpec,widthMeasureSpec);
                    maxWidth = Math.max(maxWidth, child.getMeasuredHeight());
                    maxHeight = Math.max(maxHeight, child.getMeasuredWidth());
                }
                else
                {
                    measureChild(child, widthMeasureSpec, heightMeasureSpec);
                    maxWidth = Math.max(maxWidth, child.getMeasuredWidth());
                    maxHeight = Math.max(maxHeight, child.getMeasuredHeight());
                }
            }
        }
    }
    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom)
    {
        final int width = getWidth();
        final int height = getHeight();
        final int count = getChildCount();
        for (int i = 0; i < count; i++)
        {
            final View view = getChildAt(i);
            final int childWidth = view.getMeasuredWidth();
            final int childHeight = view.getMeasuredHeight();
            final int childLeft = (width - childWidth) / 2;
            final int childTop = (height - childHeight) / 2;
            view.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight);

        }
    }
}
公共类RotationGroup扩展了ViewGroup
{
私有整数旋转=90;
公共旋转组(上下文、属性集属性)
{
超级(上下文,attrs);
}
公共旋转组(上下文){
超级(上下文);
}
@凌驾
受保护的void dispatchDraw(画布)
{
canvas.save(canvas.MATRIX\u save\u标志);
canvas.rotate(旋转,getWidth()*0.5f,getHeight()*0.5f);
super.dispatchDraw(画布);
canvas.restore();
}
@凌驾
测量时的保护空隙(内部宽度测量等级、内部高度测量等级)
{
最终整数计数=getChildCount();
int maxHeight=0;
int maxWidth=0;
for(int i=0;i
布局示例:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
        <my.RotationGroup
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
        >
                <TextView 
                    android:text="Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                />

        </my.RotationGroup>
</LinearLayout>