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