The file containing the source code shown below is located in the corresponding directory in <sdk>/samples/android-<version>/...
/* * Copyright (C) 2011 The Android开源工程 * * 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.example.android.apis.view; import com.example.android.apis.R; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.os.Bundle; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; /** * Demonstrates how to use {@link View#onHoverEvent}, {@link ViewGroup#onInterceptHoverEvent}, * and {@link View#setOnHoverListener}. * * This activity displays a few buttons and text fields and entices the user * to hover over them using a mouse or touch pad. It displays feedback reporting * the position of the pointing device and the label of the view being hovered. * * A button changes from dark green to bright yellow when hovered. * This effect is achieved by using a state-list drawable to select among different * background shapes and colors based on the hover state of the button. * * A {@link View#OnHoverEventListener} is used to listen for hover events within the * container. The container will re * * A checkbox is used to control whether a special view, the Interceptor, will intercept * events before they are sent to its child (a button). When the Interceptor * is intercepting events, the button will not change state as the pointer hovers * over it because the interceptor itself will grab the events. */ public class Hover extends Activity { private TextView mMessageTextView; private CheckBox mInterceptCheckBox; private HoverInterceptorView mInterceptor; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.hover); mMessageTextView = (TextView) findViewById(R.id.message); mInterceptCheckBox = (CheckBox) findViewById(R.id.intercept_checkbox); mInterceptor = (HoverInterceptorView) findViewById(R.id.interceptor); View container = findViewById(R.id.container); container.setOnHoverListener(new View.OnHoverListener() { @Override public boolean onHover(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_HOVER_ENTER: mMessageTextView.setText(Hover.this.getResources().getString( R.string.hover_message_entered_at, event.getX(), event.getY())); break; case MotionEvent.ACTION_HOVER_MOVE: mMessageTextView.setText(Hover.this.getResources().getString( R.string.hover_message_moved_at, event.getX(), event.getY())); break; case MotionEvent.ACTION_HOVER_EXIT: mMessageTextView.setText(Hover.this.getResources().getString( R.string.hover_message_exited_at, event.getX(), event.getY())); break; } return false; } }); mInterceptCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { mInterceptor.setInterceptHover(isChecked); } }); } }