Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.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
Java 画布:使用片段更改方向时呈现错误_Java_Android_Android Canvas - Fatal编程技术网

Java 画布:使用片段更改方向时呈现错误

Java 画布:使用片段更改方向时呈现错误,java,android,android-canvas,Java,Android,Android Canvas,在我的项目中,我有一个视图,可以绘制画布 加载acvity/fragment后,一切都正常,并且图像渲染正确 但当方向改变时,会部分渲染。 以下是两个例子: 这里是正确的渲染 2.这是方向改变时的渲染: 我编写的类扩展了视图,并重写了onDraw()方法。代码如下: @Override protected void onDraw(Canvas canvas){ super.onDraw(canvas); int size = this.width

在我的项目中,我有一个视图,可以绘制画布

加载acvity/fragment后,一切都正常,并且图像渲染正确

但当方向改变时,会部分渲染。 以下是两个例子:

  • 这里是正确的渲染
  • 2.这是方向改变时的渲染:

    我编写的类扩展了视图,并重写了onDraw()方法。代码如下:

        @Override
    protected void onDraw(Canvas canvas){       
         super.onDraw(canvas);  
         int size = this.width/2;
         int left = size/2;
         int right = size +left;
         canvas.drawRoundRect(resistorRects[0], 6, 6,resPaint[0]);      
         canvas.drawRect(resistorRects[FIRST_COLOR], resPaint[1]);       
         canvas.drawRect(resistorRects[SECOND_COLOR], resPaint[2]);
         canvas.drawRect(resistorRects[THIRD_COLOR], resPaint[3]);
         canvas.drawRect(resistorRects[MULTIPLIER], resPaint[4]);
         canvas.drawRect(resistorRects[TOLERANCE], resPaint[5]);
         canvas.drawLine((float)left-15, (float)16.5, (float)left, (float)17.5, resPaint[6]);
         canvas.drawLine((float)right, (float)16.5, (float)right+15, (float)17.5, resPaint[6]);
    }   
    
    类的构造函数是:

        public ResistorGraphicsView(Context context, int width) {       
        super(context);     
        this.width = width;     
        int i=0;        
        resPaint = new Paint[7];
        resistorRects = new RectF[6];
        while(i < 6){
            resPaint[i] = new Paint(Paint.ANTI_ALIAS_FLAG);
            resPaint[i].setColor(Color.parseColor("#DEADBEEF"));
            i++;
        }
        int size = this.width/2;
        int left = size/2;
        int right = size +left;
        resPaint[6] = new Paint(Paint.ANTI_ALIAS_FLAG);
        resPaint[6].setColor(Color.parseColor("#FFFFFFFF"));
    
    
        resistorRects[0]= new RectF(left,0,right,35);               
        resistorRects[FIRST_COLOR]= new RectF(left+10,0,left+20,35);
        resistorRects[SECOND_COLOR]= new RectF(left+30,0,left+40,35);
        resistorRects[THIRD_COLOR] = new RectF(left+50,0, left+60,35);
        resistorRects[MULTIPLIER]= new RectF(left+70,0,left+80,35);
        resistorRects[TOLERANCE]= new RectF(right-30,0,right-20,35);                        
    }
    
    事实上,如果在错误的渲染之后,我从侧窗格中选择了它,那么视图将正确渲染

    我试图添加一些断点,似乎所有的调用都是正确的。请注意,每次旋转视图时,我都会创建该对象的新实例

    case RESISTOR_VALUE:
        getFragmentManager().beginTransaction().replace(R.id.activity_container, new ResistorCalcFragment()).commit();
            break;