2

I write the following code, but the output shows nothing. No any exception throws and also no line is drawing with this code. Please help me where I am wrong???

Main Class

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View custom_view = (View) findViewById(R.id.custom_view);

    Paint p = new Paint();
    p.setColor(Color.BLACK);
    p.setStyle(Paint.Style.STROKE);
    p.setStrokeWidth((float)5);
    Canvas canvas = new Canvas();
    canvas.drawColor(Color.BLUE);

    canvas.drawLine((float)0, (float)0, (float)100, (float)100, p);
    custom_view.draw(canvas);

}

activity_main.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:background="#00000010" >

<View
    android:id="@+id/custom_view"
    android:background="#cccccc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true" /></RelativeLayout>
mohsin.mr
  • 498
  • 1
  • 6
  • 21

2 Answers2

1

I think that the problem is that you need to set a specific with and height to your View

Try something like:

public class CustomView extends View{

private Paint p;

public CustomView(Context context, AttributeSet attrs) {
    super(context, attrs); 

    init();        
}

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

    init();
}

private void init() {       

    p = new Paint();
    p.setColor(Color.WHITE);
    p.setStyle(Paint.Style.STROKE);
    p.setStrokeWidth(5);
    p.setAntiAlias(true);
}

@Override
protected void onDraw(Canvas canvas) {

    super.onDraw(canvas);

    canvas.drawLine(0, 0, 100, 100, p);
}
}

On your Activity class:

RelativeLayout mLayout;
CustomView mView;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);      

    mLayout = (RelativeLayout)findViewById(R.id.rootLayout);
    mView = new CustomView(this);
    mLayout.addView(mView);
}

And put an Id to the relative layout of rootLayout.

<?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/rootLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<View
    android:id="@+id/custom_view"
    android:background="#000000"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"    
/>
</RelativeLayout>

Hope that helps.

0gravity
  • 2,682
  • 4
  • 24
  • 33
  • I think you will be better of just creating a class that extends View and then override the onDraw method and add that to your layout. – 0gravity Aug 03 '12 at 01:28
  • I think you must draw something in OnDraw override method.Try set setTextSize when u use Paint.Style.STROKE. – enjoy-writing Aug 03 '12 at 01:59
  • Thank you Ogravity, This idea help me alot, but I did this thing by create a custom view. Follow is the solution – mohsin.mr Aug 03 '12 at 12:44
0

Layout

<?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"
    android:orientation="horizontal" >

    <RelativeLayout
        android:id="@+id/camera_preview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <com.example.drawingapp.CameraView
            android:id="@+id/cameraView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true" />

    </RelativeLayout>

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="152dp"
        android:contentDescription="@string/app_name"
        android:src="@drawable/ic_launcher" />

    <Button
        android:id="@+id/button_capture"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:text="@string/capture" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="152dp"
        android:text="@string/app_name" />

</RelativeLayout>

Custom View Class

public class CameraView extends View {

    private Paint p;
    int width = 0;
    int height = 0;
    int pass = 0;
    int xpos = 0;
    int ypos = 0;

    public CameraView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        p = new Paint();
        p.setColor(Color.WHITE);
        p.setStyle(Paint.Style.STROKE);
        p.setStrokeWidth(1);
        p.setAntiAlias(true);
    }

    public CameraView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        p = new Paint();
        p.setColor(Color.WHITE);
        p.setStyle(Paint.Style.STROKE);
        p.setStrokeWidth(1);
        p.setAntiAlias(true);
    }

    public CameraView(Context context, AttributeSet attrs) {
        super(context, attrs);
        p = new Paint();
        p.setColor(Color.WHITE);
        p.setStyle(Paint.Style.STROKE);
        p.setStrokeWidth(1);
        p.setAntiAlias(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        // TODO Auto-generated method stub
        super.onDraw(canvas);
        width = getWidth();
        height = getHeight();
        xpos = width / 5;
        ypos = height / 5;
        for (int i = 0; i < 5; i++) {

            p.setColor(Color.argb(100, 255, 255, 255));
            canvas.drawLine(xpos + (xpos * i), 0, xpos + (xpos * i),
                    height, p);
            // canvas.drawLine(startX, startY, stopX, stopY, paint)

        }
        p.setStyle(Style.STROKE);
        for (int i = 0; i < 5; i++) {
            p.setColor(Color.argb(100, 255, 255, 255));
            canvas.drawLine(0, (ypos * pass) + 5, width, (ypos * pass) + 5,
                    p);
            pass++;

        }
    }
    public void hide(){
        Visibility visibility = new Visibility();
        visibility.

    }

}

Activity Class

public class MainActivity extends Activity {


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

        setContentView(R.layout.activity_main);


}
mohsin.mr
  • 498
  • 1
  • 6
  • 21
  • So basically you are saying that the RelativeLayout in which you put your custom View should not be the ROOT layout, but inside of another layout which fills the parent and from there you get the width and height of your view? – marienke Jun 21 '13 at 09:09