1b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren/* 2b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * Copyright (C) 2014 The Android Open Source Project 3b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * 4b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * Licensed under the Apache License, Version 2.0 (the "License"); 5b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * you may not use this file except in compliance with the License. 6b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * You may obtain a copy of the License at 7b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * 8b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * http://www.apache.org/licenses/LICENSE-2.0 9b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * 10b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * Unless required by applicable law or agreed to in writing, software 11b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * distributed under the License is distributed on an "AS IS" BASIS, 12b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * See the License for the specific language governing permissions and 14b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * limitations under the License. 15b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren */ 16b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren 17b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenpackage com.android.camera.ui; 18b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren 19b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.content.Context; 20b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.graphics.Canvas; 21b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.graphics.Paint; 22b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.graphics.RectF; 23b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.util.AttributeSet; 24b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.view.View; 25b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren 26b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport com.android.camera2.R; 27b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren 28b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren/** 29b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * GridLines is a view which directly overlays the preview and draws 30b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * evenly spaced grid lines. 31b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren */ 32b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenpublic class GridLines extends View 332bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong implements PreviewStatusListener.PreviewAreaChangedListener { 34b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren 352bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong private RectF mDrawBounds; 36b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren Paint mPaint = new Paint(); 37b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren 38b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren public GridLines(Context context, AttributeSet attrs) { 39b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren super(context, attrs); 402bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong mPaint.setStrokeWidth(getResources().getDimensionPixelSize(R.dimen.grid_line_width)); 41b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren mPaint.setColor(getResources().getColor(R.color.grid_line)); 42b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren } 43b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren 44b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren @Override 45b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren public void onDraw(Canvas canvas) { 46b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren super.onDraw(canvas); 472bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong if (mDrawBounds != null) { 482bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong float thirdWidth = mDrawBounds.width() / 3; 492bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong float thirdHeight = mDrawBounds.height() / 3; 502bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong for (int i = 1; i < 3; i++) { 512bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong // Draw the vertical lines. 522bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong final float x = thirdWidth * i; 532bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong canvas.drawLine(mDrawBounds.left + x, mDrawBounds.top, 542bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong mDrawBounds.left + x, mDrawBounds.bottom, mPaint); 552bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong // Draw the horizontal lines. 562bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong final float y = thirdHeight * i; 572bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong canvas.drawLine(mDrawBounds.left, mDrawBounds.top + y, 582bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong mDrawBounds.right, mDrawBounds.top + y, mPaint); 592bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong } 60b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren } 61b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren } 62b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren 63b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren @Override 642bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong public void onPreviewAreaChanged(final RectF previewArea) { 652bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong setDrawBounds(previewArea); 66b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren } 67b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren 682bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong private void setDrawBounds(final RectF previewArea) { 692bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong mDrawBounds = new RectF(previewArea); 702bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong invalidate(); 71b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren } 72fe60979d7d7ce78de503404da8e91e118242071aAngus Kong} 73