我有一个自定义视图,它有一个绘制方法,应绘制一个覆盖屏幕的红色椭圆,但没有任何事情发生。我检查了我的自定义视图的绘制方法是否被调用,它是。
这是班级:
public class CustomView extends View {
Paint red = new Paint();
RectF ovalRec = new RectF(0,0,MainActivity.dUWidth,MainActivity.dUHeight);
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
red.setARGB(255, 255, 0, 0);
}
protected void onDraw(Canvas canvas) {
Log.i("log_tag", "DRAWING THE OVAL");
canvas.drawOval(ovalRec, red);
super.onDraw(canvas);
}
}
在这里你可以看到dUWidth和dUHeight是什么。
public class MainActivity extends AppCompatActivity {
public static int dUWidth;
public static int dUHeight;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Auto-gen code
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Getting height & width of USABLE display and setting it to Point variable.
Display display = getWindowManager().getDefaultDisplay();
Point sizeOfDisplay = new Point();
display.getSize(sizeOfDisplay);
dUWidth = sizeOfDisplay.x;
dUHeight = sizeOfDisplay.y;
}
以下是XML声明:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<com.XXX.targetexercise.CustomView
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
答案 0 :(得分:1)
- &GT; setContentView()
- &GT;解析您的布局文件
- &GT;找到您的CustomView
- &GT;开始创建CustomView
- &GT;创建您的ovalRec
- &GT;使用dUWidth和dUHeight为0
- &GT; (在setContentView之外,但仍在onCreate中)初始化dUWidth和dUheight
这不是真正的过程的每一步,但我认为这样更容易理解。
因此,请在初始化dUWidth&amp;之后尝试更新ovalRec
。 dUHeight并致电View.invalidate()
。