如何绘制beyound视图翻译限制?

时间:2012-05-06 18:27:45

标签: android graphics translation invalidation

以下程序绘制一个饼图(部分圆圈,一个扇区),而我希望它绘制整个(整圆)圆圈。如何绘制整个圆圈?

自定义视图的代码:

public class CentralCircleView extends View {

private Paint circlePaint = new Paint();
{
    circlePaint.setColor(Color.RED);
    circlePaint.setAntiAlias(true);
}

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

public CentralCircleView(Context context, AttributeSet attrs) {
    super(context, attrs);
}


@Override
protected void onDraw(Canvas canvas) {
    canvas.drawCircle(0, 0, 100, circlePaint);
}
}

活动代码:

public class TransformsActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    CentralCircleView centralCircleView = (CentralCircleView) findViewById(R.id.centralCircleView);
    centralCircleView.setTranslationX(200f);
    centralCircleView.setTranslationY(200f);
    centralCircleView.invalidate();
}
}

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"

>

<com.inthemoon.incubation.CentralCircleView
    android:id="@+id/centralCircleView"
    android:layout_marginLeft="0dp"
    android:layout_marginTop="0dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
     />

</RelativeLayout>

这是它的绘制。圆圈的其余部分在哪里?

enter image description here

2 个答案:

答案 0 :(得分:4)

您的View的高度设置为wrap_content,这意味着您需要实现onMeasure()方法来告诉RelativeLayout视图的大小。

答案 1 :(得分:-5)

要绘制“视图外”,应使用clipRect()方法。例如,就我而言,我是以下列方式编写onDraw()

protected void onDraw(Canvas canvas) {
    canvas.clipRect(new Rect(-100,-100,100,100), Region.Op.UNION);
    canvas.drawCircle(0, 0, 100, circlePaint);
}