19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.widget; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.annotation.Widget; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.Context; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.LayoutInflater; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.MotionEvent; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.View; 258a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganovimport android.view.accessibility.AccessibilityEvent; 268a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganovimport android.view.accessibility.AccessibilityNodeInfo; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.animation.AlphaAnimation; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.R; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The {@code ZoomControls} class displays a simple set of controls used for zooming and 34ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * provides callbacks to register for events. */ 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@Widget 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ZoomControls extends LinearLayout { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final ZoomButton mZoomIn; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final ZoomButton mZoomOut; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ZoomControls(Context context) { 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, null); 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ZoomControls(Context context, AttributeSet attrs) { 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFocusable(false); 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LayoutInflater inflater = (LayoutInflater) context 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inflater.inflate(R.layout.zoom_controls, this, // we are the parent 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project true); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomIn = (ZoomButton) findViewById(R.id.zoomIn); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomOut = (ZoomButton) findViewById(R.id.zoomOut); 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setOnZoomInClickListener(OnClickListener listener) { 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomIn.setOnClickListener(listener); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setOnZoomOutClickListener(OnClickListener listener) { 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomOut.setOnClickListener(listener); 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets how fast you get zoom events when the user holds down the 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * zoom in/out buttons. 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setZoomSpeed(long speed) { 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomIn.setZoomSpeed(speed); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomOut.setZoomSpeed(speed); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onTouchEvent(MotionEvent event) { 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Consume all touch events so they don't get dispatched to the view 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * beneath this view. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void show() { 85ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project fade(View.VISIBLE, 0.0f, 1.0f); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void hide() { 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fade(View.GONE, 1.0f, 0.0f); 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void fade(int visibility, float startAlpha, float endAlpha) { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AlphaAnimation anim = new AlphaAnimation(startAlpha, endAlpha); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project anim.setDuration(500); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startAnimation(anim); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setVisibility(visibility); 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIsZoomInEnabled(boolean isEnabled) { 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomIn.setEnabled(isEnabled); 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIsZoomOutEnabled(boolean isEnabled) { 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomOut.setEnabled(isEnabled); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasFocus() { 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mZoomIn.hasFocus() || mZoomOut.hasFocus(); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1118a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov 1128a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov @Override 1138a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov public void onInitializeAccessibilityEvent(AccessibilityEvent event) { 1148a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov super.onInitializeAccessibilityEvent(event); 1158a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov event.setClassName(ZoomControls.class.getName()); 1168a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov } 1178a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov 1188a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov @Override 1198a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) { 1208a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov super.onInitializeAccessibilityNodeInfo(info); 1218a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov info.setClassName(ZoomControls.class.getName()); 1228a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov } 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 124