ColorChipView.java revision 056079920bc9d141241648662ad4ebdea91b1fd4
1056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson/* 2056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * Copyright (C) 2011 The Android Open Source Project 3056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * 4056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * Licensed under the Apache License, Version 2.0 (the "License"); 5056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * you may not use this file except in compliance with the License. 6056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * You may obtain a copy of the License at 7056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * 8056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * http://www.apache.org/licenses/LICENSE-2.0 9056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * 10056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * Unless required by applicable law or agreed to in writing, software 11056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * distributed under the License is distributed on an "AS IS" BASIS, 12056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * See the License for the specific language governing permissions and 14056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * limitations under the License. 15056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson */ 16056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 17056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonpackage com.android.calendar; 18056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 19056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.content.Context; 20056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.Canvas; 21056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.Paint; 22056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.Paint.Style; 23056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.graphics.drawable.Drawable; 24056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.util.AttributeSet; 25056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.util.Log; 26056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonimport android.view.View; 27056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 28056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 29056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 30056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 31056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson/** 32056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * A custom view for a color chip for an event that can be drawn differently 33056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * accroding to the event's status. 34056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson * 35056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson */ 36056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelsonpublic class ColorChipView extends View { 37056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 38056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson private static final String TAG = "ColorChipView"; 39056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson // Style of drawing 40056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson // Full rectangle for accepted events 41056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson // Border for tentative events 42056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson // Cross-hatched with 50% transparency for declined events 43056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 44056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public static final int DRAW_FULL = 0; 45056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public static final int DRAW_BORDER = 1; 46056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public static final int DRAW_CROSS_HATCHED = 2; 47056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 48056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public static final float DECLINED_ALPHA = (float)0.5; 49056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public static final float DEFAULT_ALPHA = (float)1; 50056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 51056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 52056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson int mDrawStyle = DRAW_FULL; 53056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 54056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson private static final int DEF_BORDER_WIDTH = 3; 55056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 56056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson int mBorderWidth = DEF_BORDER_WIDTH; 57056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 58056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson int mColor; 59056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 60056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public ColorChipView(Context context) { 61056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson super(context); 62056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 63056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 64056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public ColorChipView(Context context, AttributeSet attrs) { 65056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson super(context, attrs); 66056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 67056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 68056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public void setDrawStyle(int style) { 69056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson if (style != DRAW_FULL && style != DRAW_BORDER && style != DRAW_CROSS_HATCHED) { 70056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson return; 71056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 72056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson mDrawStyle = style; 73056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 74056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 75056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public void setBorderWidth(int width) { 76056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson if (width >= 0) { 77056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson mBorderWidth = width; 78056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 79056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 80056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 81056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public void setColor(int color) { 82056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson mColor = color; 83056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 84056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 85056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson @Override 86056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson public void onDraw(Canvas c) { 87056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 88056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson int right = getWidth() - 1; 89056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson int bottom = getHeight() - 1; 90056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson Paint p = new Paint(); 91056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson p.setColor(mColor); 92056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson p.setStyle(Style.FILL_AND_STROKE); 93056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 94056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson switch (mDrawStyle) { 95056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson case DRAW_FULL: 96056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson c.drawRect(0, 0, right, bottom, p); 97056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson setAlpha(DEFAULT_ALPHA); 98056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson break; 99056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson case DRAW_BORDER: 100056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson if (mBorderWidth <= 0) { 101056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson return; 102056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 103056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson int halfBorderWidth = mBorderWidth / 2; 104056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson int top = halfBorderWidth; 105056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson int left = halfBorderWidth; 106056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson p.setStrokeWidth(mBorderWidth); 107056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson 108056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson float [] lines = new float [16]; 109056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson int ptr = 0; 110056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = 0; 111056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = top; 112056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = right; 113056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = top; 114056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = 0; 115056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = bottom - halfBorderWidth; 116056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = right; 117056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = bottom - halfBorderWidth; 118056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = left; 119056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = 0; 120056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = left; 121056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = bottom; 122056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = right - halfBorderWidth; 123056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = 0; 124056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = right - halfBorderWidth; 125056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson lines [ptr++] = bottom; 126056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson c.drawLines(lines, p); 127056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson setAlpha(DEFAULT_ALPHA); 128056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson break; 129056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson case DRAW_CROSS_HATCHED: 130056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson // TODO: replace this with an asset 131056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson c.drawLine(0, 0, right, bottom, p); 132056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson c.drawLine(0, bottom, right, 0, p); 133056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson setAlpha(DECLINED_ALPHA); 134056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson break; 135056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson default: 136056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson break; 137056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 138056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson } 139056079920bc9d141241648662ad4ebdea91b1fd4Isaac Katzenelson} 140