代码之家  ›  专栏  ›  技术社区  ›  Foobar

Draw方法不绘制任何内容

  •  0
  • Foobar  · 技术社区  · 9 年前

    我有一个自定义视图,它有一个绘制方法,应该绘制一个覆盖屏幕的红色椭圆形,但没有发生任何事情。我检查了自定义视图的绘制方法是否被调用,并且确实被调用了。

    这是一个类:

    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>
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   Trey Cai    9 年前

    -> setContentView()

    ->分析布局文件

    ->查找自定义视图

    ->开始创建自定义视图

    ->创建您的 ovalRec

    ->使用dUWidth和dUHeight,即0

    ->(在setContentView之外,但仍在onCreate中)初始化dUWidth和dUheight

    这并不是过程中的每一步都是真实的,但我认为这样更容易理解。

    因此,尝试更新您的 椭圆Rec 在初始化dUWidth&dUHeight和call View.invalidate() .