2012-04-11 3 views
0

RECTの親ビューを変更しないと私はために軸アンドロイドのclipRectは、私は子ビューを持た

canvas.drawCircle(0, 0, 50f, paint); 

のマイナス側に「ピクセル」を持って、円を描くキャンバスをしたいです私はclipRectを使用してこれを行うには、これはうまく動作し、私は完全なcirlceを参照してください。私は親ビューにrequestLayoutを使用すると、子ビュー のX、Yのpostionを変更した場合しかし、円のマイナスSIDSがここ

をどうするかを私に助言してください 示されていない はコードです:

package natan.android.TestCanvas; 

    import android.app.Activity; 
    import android.graphics.Canvas; 
    import android.graphics.Color; 
    import android.graphics.Paint; 
    import android.os.Bundle; 
    import android.view.MotionEvent; 
    import android.view.View; 
    import android.widget.RelativeLayout; 
    import android.widget.RelativeLayout.LayoutParams; 

    public class TestCanvasActivity extends Activity { 

     View childView; 
     RelativeLayout parentView; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      childView = new View(this) 
      { 

       @Override 
       protected void onDraw(Canvas canvas) { 
        canvas.clipRect(-50, -50, 50, 50,android.graphics.Region.Op.REPLACE); 
        Paint paint = new Paint(); 
        paint.setStyle(Paint.Style.FILL); 
        paint.setColor(Color.RED); 
        canvas.drawCircle(0, 0, 50f, paint); 
        super.onDraw(canvas); 
       } 

      }; 

      parentView = new RelativeLayout(this); 
      parentView.addView(childView); 
      LayoutParams layoutParms = (LayoutParams)(childView.getLayoutParams()); 
      layoutParms.leftMargin=150; 
      layoutParms.topMargin=150; 
      setContentView(parentView); 
     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      LayoutParams layoutParms = (LayoutParams)(childView.getLayoutParams()); 
      layoutParms.leftMargin=100; 
      layoutParms.topMargin=100; 
      parentView.requestLayout(); 
      return super.onTouchEvent(event); 
     } 


    } 
私は私がここに

タラのこのラインを使用して

http://www.devdaily.com/java/jwarehouse/android/core/java/android/view/ViewGroup.java.shtml

からそれを取ったsoulation を考え出したと思う

答えて

0

public class TestCanvasActivity extends Activity { 

     View childView; 
     RelativeLayout parentView; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      childView = new View(this) 
      { 

       @Override 
       protected void onDraw(Canvas canvas) { 
             Paint paint = new Paint(); 
        paint.setStyle(Paint.Style.FILL); 
        paint.setColor(Color.RED); 
        canvas.drawCircle(0, 0, 50f, paint); 
        super.onDraw(canvas); 
       } 

      }; 






      parentView = new RelativeLayout(this) 
      { 

       @Override 
       protected void onLayout(boolean changed, int l, int t, 
         int r, int b) { 
        // TODO Auto-generated method stub 
        super.onLayout(changed, l, t, r, b); 
       } 

      }; 
      parentView.setClipChildren(false); 

      parentView.addView(childView); 
      parentView.setClipChildren(false); 
      LayoutParams layoutParms = (LayoutParams)(childView.getLayoutParams()); 
      layoutParms.leftMargin=150; 
      layoutParms.topMargin=150; 

      setContentView(parentView); 

     } 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      LayoutParams layoutParms = (LayoutParams)(childView.getLayoutParams()); 
      layoutParms.leftMargin=100; 
      layoutParms.topMargin=100; 

      parentView.requestLayout(); 
      parentView.invalidate(); 

      return super.onTouchEvent(event); 


     } 


    } 
:ESは問題

parentView.setClipChildren(false); 

parentView.requestLayout(); 
    parentView.invalidate(); 

ホープスこれは他の誰かを助け、誰かがこの問題に関する詳細な洞察力を持っている場合は、ここでそれを

を追加してくださいは、完全なコードで固定しました

関連する問題