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; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.animation.AlphaAnimation; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.R; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The {@code ZoomControls} class displays a simple set of controls used for zooming and 32ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project * provides callbacks to register for events. */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project@Widget 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class ZoomControls extends LinearLayout { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final ZoomButton mZoomIn; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private final ZoomButton mZoomOut; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ZoomControls(Context context) { 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project this(context, null); 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ZoomControls(Context context, AttributeSet attrs) { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(context, attrs); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setFocusable(false); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LayoutInflater inflater = (LayoutInflater) context 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inflater.inflate(R.layout.zoom_controls, this, // we are the parent 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project true); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomIn = (ZoomButton) findViewById(R.id.zoomIn); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomOut = (ZoomButton) findViewById(R.id.zoomOut); 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setOnZoomInClickListener(OnClickListener listener) { 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomIn.setOnClickListener(listener); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setOnZoomOutClickListener(OnClickListener listener) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomOut.setOnClickListener(listener); 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Sets how fast you get zoom events when the user holds down the 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * zoom in/out buttons. 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setZoomSpeed(long speed) { 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomIn.setZoomSpeed(speed); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomOut.setZoomSpeed(speed); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean onTouchEvent(MotionEvent event) { 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* Consume all touch events so they don't get dispatched to the view 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * beneath this view. 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void show() { 83ba87e3e6c985e7175152993b5efcc7dd2f0e1c93The Android Open Source Project fade(View.VISIBLE, 0.0f, 1.0f); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void hide() { 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fade(View.GONE, 1.0f, 0.0f); 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void fade(int visibility, float startAlpha, float endAlpha) { 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AlphaAnimation anim = new AlphaAnimation(startAlpha, endAlpha); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project anim.setDuration(500); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project startAnimation(anim); 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project setVisibility(visibility); 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIsZoomInEnabled(boolean isEnabled) { 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomIn.setEnabled(isEnabled); 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setIsZoomOutEnabled(boolean isEnabled) { 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mZoomOut.setEnabled(isEnabled); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean hasFocus() { 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mZoomIn.hasFocus() || mZoomOut.hasFocus(); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1098a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov 1108a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov @Override 111a7bb6fbeab933326d58aa806d8194b7b13239d34Dianne Hackborn public CharSequence getAccessibilityClassName() { 112a7bb6fbeab933326d58aa806d8194b7b13239d34Dianne Hackborn return ZoomControls.class.getName(); 1138a78fd4d9572dff95432fcc4ba0e87563415b728Svetoslav Ganov } 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 115