Android: Drawing on Canvas in Scrollview public class DrawPoints extends myActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.routes); } public static class SampleView extends View { private Paint mPaint = new Paint(); private float[] mPts; /*here comes declaration of parametars private void buildPoints() { /*here comes some coding*/ } } public SampleView(Context context, AttributeSet attributeset) { super(context, attributeSet); buildPoints(); } @Override protected void onDraw(Canvas canvas) { Paint paint = mPaint; //here also comes code } } } View v = new SampleView(this); addContentView(v, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT)); View v = new SampleView(this); ScrollView.LayoutParams lp = new ScrollView.LayoutParams(1000, 1000); addContentView(v, lp); View v = new SampleView(this); FrameLayout fl = new FrameLayout(this); fl.findViewById(R.id.FrameLayout1); fl.addView(v); public class SampleView extends View { private Paint mPaint = new Paint(); private float[] mPts; private static final float SIZE = 1000; private static final int SEGS = 50; private static final int X = 0; private static final int Y = 1; private void buildPoints() { final int ptCount = (SEGS + 1) * 2; mPts = new float[ptCount * 2]; float value = 0; final float delta = SIZE / SEGS; for (int i = 0; i <= SEGS; i++) { mPts[i*4 + X] = SIZE - value; mPts[i*4 + Y] = 0; mPts[i*4 + X + 2] = 0; mPts[i*4 + Y + 2] = value; value += delta; } } public SampleView(Context context){ super(context); //initSampleView(); buildPoints(); } //This constructor is very important because withouth of this //you can't insert this view in xml public SampleView(Context context, AttributeSet attrs) { super(context, attrs); //initSampleView(); buildPoints(); } /*private final void initSampleView() { mPaint = new Paint(); mPaint.setAntiAlias(true); setPadding(3, 3, 3, 3); }*/ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(measureWidth(widthMeasureSpec), measureHeight(heightMeasureSpec)); } /** * Determines the width of this view * @param measureSpec A measureSpec packed into an int * @return The width of the view, honoring constraints from measureSpec */ private int measureWidth(int measureSpec) { int result = 0; //This is because of background image in relativeLayout, which is 1000*1000px measureSpec = 1001; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.UNSPECIFIED) { // We were told how big to be result = specSize; } return result; } /** * Determines the height of this view * @param measureSpec A measureSpec packed into an int * @return The height of the view, honoring constraints from measureSpec */ private int measureHeight(int measureSpec) { int result = 0; //This is because of background image in relativeLayout, which is 1000*1000px measureSpec = 1001; int specMode = MeasureSpec.getMode(measureSpec); int specSize = MeasureSpec.getSize(measureSpec); if (specMode == MeasureSpec.UNSPECIFIED) { // Here we say how Heigh to be result = specSize; } return result; } @Override protected void onDraw(Canvas canvas) { Paint paint = mPaint; canvas.translate(10, 10); paint.setColor(Color.RED); paint.setStrokeWidth(0); canvas.drawLines(mPts, paint); paint.setColor(Color.BLUE); paint.setStrokeWidth(3); canvas.drawPoints(mPts, paint); } }