Home | History | Annotate | Download | only in widget
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.widget;
     18 
     19 import android.annotation.Widget;
     20 import android.content.Context;
     21 import android.util.AttributeSet;
     22 import android.view.LayoutInflater;
     23 import android.view.MotionEvent;
     24 import android.view.View;
     25 import android.view.accessibility.AccessibilityEvent;
     26 import android.view.accessibility.AccessibilityNodeInfo;
     27 import android.view.animation.AlphaAnimation;
     28 
     29 import com.android.internal.R;
     30 
     31 
     32 /**
     33  * The {@code ZoomControls} class displays a simple set of controls used for zooming and
     34  * provides callbacks to register for events. */
     35 @Widget
     36 public class ZoomControls extends LinearLayout {
     37 
     38     private final ZoomButton mZoomIn;
     39     private final ZoomButton mZoomOut;
     40 
     41     public ZoomControls(Context context) {
     42         this(context, null);
     43     }
     44 
     45     public ZoomControls(Context context, AttributeSet attrs) {
     46         super(context, attrs);
     47         setFocusable(false);
     48 
     49         LayoutInflater inflater = (LayoutInflater) context
     50                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     51         inflater.inflate(R.layout.zoom_controls, this, // we are the parent
     52                 true);
     53 
     54         mZoomIn = (ZoomButton) findViewById(R.id.zoomIn);
     55         mZoomOut = (ZoomButton) findViewById(R.id.zoomOut);
     56     }
     57 
     58     public void setOnZoomInClickListener(OnClickListener listener) {
     59         mZoomIn.setOnClickListener(listener);
     60     }
     61 
     62     public void setOnZoomOutClickListener(OnClickListener listener) {
     63         mZoomOut.setOnClickListener(listener);
     64     }
     65 
     66     /*
     67      * Sets how fast you get zoom events when the user holds down the
     68      * zoom in/out buttons.
     69      */
     70     public void setZoomSpeed(long speed) {
     71         mZoomIn.setZoomSpeed(speed);
     72         mZoomOut.setZoomSpeed(speed);
     73     }
     74 
     75     @Override
     76     public boolean onTouchEvent(MotionEvent event) {
     77 
     78         /* Consume all touch events so they don't get dispatched to the view
     79          * beneath this view.
     80          */
     81         return true;
     82     }
     83 
     84     public void show() {
     85         fade(View.VISIBLE, 0.0f, 1.0f);
     86     }
     87 
     88     public void hide() {
     89         fade(View.GONE, 1.0f, 0.0f);
     90     }
     91 
     92     private void fade(int visibility, float startAlpha, float endAlpha) {
     93         AlphaAnimation anim = new AlphaAnimation(startAlpha, endAlpha);
     94         anim.setDuration(500);
     95         startAnimation(anim);
     96         setVisibility(visibility);
     97     }
     98 
     99     public void setIsZoomInEnabled(boolean isEnabled) {
    100         mZoomIn.setEnabled(isEnabled);
    101     }
    102 
    103     public void setIsZoomOutEnabled(boolean isEnabled) {
    104         mZoomOut.setEnabled(isEnabled);
    105     }
    106 
    107     @Override
    108     public boolean hasFocus() {
    109         return mZoomIn.hasFocus() || mZoomOut.hasFocus();
    110     }
    111 
    112     @Override
    113     public void onInitializeAccessibilityEvent(AccessibilityEvent event) {
    114         super.onInitializeAccessibilityEvent(event);
    115         event.setClassName(ZoomControls.class.getName());
    116     }
    117 
    118     @Override
    119     public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
    120         super.onInitializeAccessibilityNodeInfo(info);
    121         info.setClassName(ZoomControls.class.getName());
    122     }
    123 }
    124