1b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project/* 2b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 4b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * you may not use this file except in compliance with the License. 6b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * You may obtain a copy of the License at 7b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 8b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * 10b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * See the License for the specific language governing permissions and 14b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * limitations under the License. 15b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project */ 16b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 17b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectpackage com.android.calculator2; 18b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 19b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.content.Context; 20b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.graphics.Paint; 21b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.util.AttributeSet; 22b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.view.View.OnClickListener; 23b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectimport android.view.View; 24c0c011f0503af651769d686aad7bf2927e0242b1Mindy Pereiraimport android.widget.Button; 25b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 26b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project/** 27b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project * Button with click-animation effect. 28b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project */ 29b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Projectclass ColorButton extends Button implements OnClickListener { 30b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project int CLICK_FEEDBACK_COLOR; 31b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project static final int CLICK_FEEDBACK_INTERVAL = 10; 32b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project static final int CLICK_FEEDBACK_DURATION = 350; 339476df20f8c944746814d3e7ebd1f1eb41499025Dmitri Plotnikov 34b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project float mTextX; 35b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project float mTextY; 36b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project long mAnimStart; 37b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project OnClickListener mListener; 389476df20f8c944746814d3e7ebd1f1eb41499025Dmitri Plotnikov 39b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public ColorButton(Context context, AttributeSet attrs) { 40b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project super(context, attrs); 411d3117595c5849929588741c4ded20ceb26e7336Jacek Surazski Calculator calc = (Calculator) context; 421d3117595c5849929588741c4ded20ceb26e7336Jacek Surazski mListener = calc.mListener; 43b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project setOnClickListener(this); 44b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 45b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 46b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public void onClick(View view) { 47b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mListener.onClick(this); 48b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 49b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 509476df20f8c944746814d3e7ebd1f1eb41499025Dmitri Plotnikov @Override 51b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project public void onSizeChanged(int w, int h, int oldW, int oldH) { 52b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project measureText(); 53b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 54b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 55b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project private void measureText() { 56b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project Paint paint = getPaint(); 57b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mTextX = (getWidth() - paint.measureText(getText().toString())) / 2; 58b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project mTextY = (getHeight() - paint.ascent() - paint.descent()) / 2; 59b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 60b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project 61b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project @Override 62b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project protected void onTextChanged(CharSequence text, int start, int before, int after) { 63b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project measureText(); 64b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project } 65b301ed2e1720fc9190eaf99ab33b5f49eabcebc5The Android Open Source Project} 66