diff options
| author | Chung-yih Wang <cywang@google.com> | 2011-08-19 00:06:51 +0800 |
|---|---|---|
| committer | Chung-yih Wang <cywang@google.com> | 2011-08-23 19:01:11 +0800 |
| commit | ff45331706e2fe361b4ff736d90b0ad4af0e7be9 (patch) | |
| tree | b2e242b2ef9808b93fbc7eb853ed61a4a336b47c /src/com/android/camera/ui/SecondLevelIndicatorControlBar.java | |
| parent | e285af9d6df325a8c3dfd70248add8ab62fe5b3b (diff) | |
| download | LegacyCamera-ff45331706e2fe361b4ff736d90b0ad4af0e7be9.zip LegacyCamera-ff45331706e2fe361b4ff736d90b0ad4af0e7be9.tar.gz LegacyCamera-ff45331706e2fe361b4ff736d90b0ad4af0e7be9.tar.bz2 | |
Refactor indicator wheel.
+add IndicatorControlWheel container.
Change-Id: Ia3c7f0441de75a70c8a2172e86d3812b2ef1a15b
Diffstat (limited to 'src/com/android/camera/ui/SecondLevelIndicatorControlBar.java')
| -rw-r--r-- | src/com/android/camera/ui/SecondLevelIndicatorControlBar.java | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/src/com/android/camera/ui/SecondLevelIndicatorControlBar.java b/src/com/android/camera/ui/SecondLevelIndicatorControlBar.java new file mode 100644 index 0000000..8fb3599 --- /dev/null +++ b/src/com/android/camera/ui/SecondLevelIndicatorControlBar.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.camera.ui; + +import com.android.camera.PreferenceGroup; +import com.android.camera.R; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ImageView; + +/** + * A view that contains camera setting indicators which are spread over a + * vertical bar in preview frame. + */ +public class SecondLevelIndicatorControlBar extends IndicatorControl implements + View.OnClickListener { + private static final String TAG = "SecondLevelIndicatorControlBar"; + private ImageView mCloseIcon; + int mDegree = 0; + int mSelectedIndex = -1; + + public SecondLevelIndicatorControlBar(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + public void initialize(Context context, PreferenceGroup group, + String[] keys, String[] otherSettingKeys) { + if (mCloseIcon == null) { + mCloseIcon = new ImageView(context); + mCloseIcon.setImageResource(R.drawable.btn_close_settings); + mCloseIcon.setOnClickListener(this); + addView(mCloseIcon); + } + super.initialize(context, group, keys, otherSettingKeys); + if (mDegree != 0) setDegree(mDegree); + } + + public void onClick(View view) { + dismissSettingPopup(); + mOnIndicatorEventListener.onIndicatorEvent( + OnIndicatorEventListener.EVENT_LEAVE_SECOND_LEVEL_INDICATOR_BAR); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + if (!onFilterTouchEventForSecurity(event)) return false; + + int action = event.getAction(); + if (!isEnabled()) return false; + + double x = (double) event.getX(); + double y = (double) event.getY(); + int height = getHeight(); + if (x > getWidth()) x = getWidth(); + if (y >= height) y = height - 1; + + int index = (int) (y * getChildCount()) / height; + View b = getChildAt(index); + b.dispatchTouchEvent(event); + if ((mSelectedIndex != -1) && (index != mSelectedIndex)) { + View v = getChildAt(mSelectedIndex); + if (v instanceof AbstractIndicatorButton) { + AbstractIndicatorButton c = (AbstractIndicatorButton) v; + event.setAction(MotionEvent.ACTION_CANCEL); + c.dispatchTouchEvent(event); + c.dismissPopup(); + } + + if (action == MotionEvent.ACTION_MOVE) { + event.setAction(MotionEvent.ACTION_DOWN); + b.dispatchTouchEvent(event); + } + } + mSelectedIndex = index; + return true; + } + + @Override + public void setDegree(int degree) { + mDegree = degree; + super.setDegree(degree); + } + + @Override + protected void onLayout( + boolean changed, int left, int top, int right, int bottom) { + int count = getChildCount(); + if (count == 0) return; + int width = right - left; + int height = bottom - top; + int h = height / count; + for (int i = 0; i < count; i++) { + getChildAt(i).layout(0, top + i * height / count, width, + top + i * height / count + h); + } + } +} |
