How to add a view (described in a java class) at a particular location in the layout? <p>This is my xml file</p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout0" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".CanvasActivity" android:baselineAligned="false"&gt; &lt;LinearLayout android:id="@+id/LinearLayout1" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:background="#f9dfcb"&gt; &lt;/LinearLayout&gt; &lt;LinearLayout android:id="@+id/LinearLayout2" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="3" android:background="#000000" &gt; &lt;/LinearLayout&gt; &lt;/LinearLayout&gt; </code></pre> <p>My activity code</p> <pre><code>import android.app.Activity; import android.content.Intent; import android.graphics.Canvas; import android.graphics.Color; import android.os.Bundle; import android.view.GestureDetector; import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.LinearLayout; import android.widget.Toast; public class CanvasActivity extends Activity { private GestureDetector gestureDetector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_canvas); gestureDetector = new GestureDetector(this, new GestureListener()); LinearLayout LinearLayout1=(LinearLayout)findViewById(R.id.LinearLayout1); LinearLayout1.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View v, MotionEvent event){ if (gestureDetector.onTouchEvent(event)) { return true; } return false; } }); /*********EDITED*******/ LinearLayout LinearLayout2=(LinearLayout)findViewById(R.id.LinearLayout2); int width=LinearLayout2.getWidth(); int height=LinearLayout2.getHeight(); LinearLayout2.addView(new Canvasview(this), width, height) ; LinearLayout2.setOnTouchListener(new OnTouchListener(){ public boolean onTouch(View v, MotionEvent event){ Canvasview cv= new Canvasview(v.getContext()); cv.onTouchEvent(event); return true; } }); } //discerning swipes class GestureListener extends SimpleOnGestureListener { private static final int SWIPE_MIN_DISTANCE = 120; private static final int SWIPE_THRESHOLD_VELOCITY = 200; @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if(e1.getX() - e2.getX() &gt; SWIPE_MIN_DISTANCE &amp;&amp; Math.abs(velocityX) &gt; SWIPE_THRESHOLD_VELOCITY) { //From Right to Left Toast.makeText(CanvasActivity.this, "Left Swipe", Toast.LENGTH_SHORT).show(); return true; } else if(e1.getY() - e2.getY() &gt; SWIPE_MIN_DISTANCE &amp;&amp; Math.abs(velocityY) &gt; SWIPE_THRESHOLD_VELOCITY) { //From Bottom to Top Toast.makeText(CanvasActivity.this, "Top Swipe", Toast.LENGTH_SHORT).show(); return true; } return false; } @Override public boolean onDown(MotionEvent e) { return true; } } } </code></pre> <p>My Canvasview looks like this</p> <pre><code>public class Canvasview extends SurfaceView implements SurfaceHolder.Callback{ private int width, height; private Paint textPaint = new Paint(); private Paint touchPaint = new Paint(); private int colors[] = new int[10]; public Canvasview(Context context) { super(context); SurfaceHolder holder = getHolder(); holder.addCallback(this); setFocusable(true); // make sure we get key events setFocusableInTouchMode(true); // make sure we get touch events init(); } private void init() { textPaint.setColor(Color.WHITE); colors[0] = Color.RED; touchPaint = new Paint(); touchPaint.setColor(colors[0]); } public boolean onTouchEvent(MotionEvent event) { Canvas c = getHolder().lockCanvas(); if (c != null) { if (event.getAction() == MotionEvent.ACTION_UP) { // clear everything } else { int xval = (int)event.getX(); int yval = (int)event.getY(); drawCircle(xval,yval,touchPaint,c); } getHolder().unlockCanvasAndPost(c); } return true; } public void clear(Canvas c){ c = getHolder().lockCanvas(); c.drawColor(Color.BLACK); getHolder().unlockCanvasAndPost(c); } private void drawCircle(int x, int y, Paint paint, Canvas c) { c.drawCircle(x, y, 2, paint); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){ Canvas c = getHolder().lockCanvas(); if (c != null) { // clear screen c.drawColor(Color.BLACK); getHolder().unlockCanvasAndPost(c); } } @Override public void surfaceCreated(SurfaceHolder arg0) { // TODO Auto-generated method stub } @Override public void surfaceDestroyed(SurfaceHolder arg0) { // TODO Auto-generated method stub } } </code></pre> <p>I need the canvas only in linearlayout2, but the canvas occupies the entire screen. I am not sure where I am going wrong. </p> <p>EDIT: Well I did few changes and I get the Canvasview in linearlayout2, the ontouchevents of Canvasview detects the touch events but in Canvasview public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) method does not initialize a canvas and therefore it is always null. To draw I need the canvas not to be null. Any help is appreciated</p>