Search code examples
androidpaintondrawrect

About onDraw method


I want to draw rectangle on screen. But I don't run programme. Because, I am writing wrong code. Therefore, I am not writing MainActivity below. Can you help me to use the onDraw method?

Best Regards.

MainActivity.java

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


}

}

Deneme.java

public class Deneme extends View {

Paint myPaint;

public Deneme(Context context) {
    super(context);

    myPaint = new Paint();
    myPaint.setColor(Color.BLACK);
    myPaint.setStyle(Paint.Style.FILL);
}

@Override
protected void  onDraw(Canvas canvas) {
    super.onDraw(canvas);
    Rect ourRect = new Rect();
    ourRect.set(0,0,canvas.getWidth(),canvas.getHeight()/2);
    canvas.drawRect(ourRect,myPaint);
}

}


Solution

  • You can try this:

    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.Rect;
    import android.view.View;
    
    public class Deneme extends View {
    
        private Rect mRectangle;
        private Paint mPaint;
    
        public Deneme(Context context) {
            super(context);
            int x = 50;
            int y = 50;
            int sideLength = 200;
    
            // create a rectangle that we'll draw later
            mRectangle = new Rect(x, y, sideLength, sideLength);
    
            // create the Paint and set its color        
            mPaint = new Paint();
            mPaint.setColor(Color.GRAY);
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawColor(Color.BLUE);
            canvas.drawRect(mRectangle, mPaint);
        }
    
    }
    

    Fast way

    And your activity:

    import android.support.v7.app.AppCompatActivity;
    
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(new Deneme(this));
        }
    
    }
    

    Also you can try this elegant way:

    In your layout activity_main:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main_relative_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.package.RectangleActivity">
    
    </RelativeLayout>
    

    In your activity:

    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.LinearLayout;
    import android.widget.RelativeLayout;
    
    import com.package.Deneme;
    import com.package.R;
    
    public class MainActivity extends AppCompatActivity {
    
        private RelativeLayout mRelativeLayout;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            //add RelativeLayout
            mRelativeLayout =(RelativeLayout) findViewById(R.id.activity_main_relative_layout);
    
            //add LayoutParams
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
    
            Deneme rectangle = new Deneme(this);
            rectangle.setLayoutParams(params);
            mRelativeLayout.addView(rectangle);
    
        }
    }
    

    You'll find the supporting medium article!!! and this example in GitHub