zoukankan      html  css  js  c++  java
  • Android不规则点击区域详解

     直接上代码:

    1.demo代码,DemoActivity.java

     1 package com.test.activity;
     2 
     3 import android.app.Activity;
     4 import android.os.Bundle;
     5 import android.view.View;
     6 import android.view.View.OnClickListener;
     7 import android.widget.Toast;
     8 
     9 import com.test.R;
    10 
    11 public class DemoActivity extends Activity implements OnClickListener {
    12     
    13     private Toast mToast;
    14 
    15     @Override
    16     protected void onCreate(Bundle savedInstanceState) {
    17         super.onCreate( savedInstanceState);
    18         setContentView( R.layout.activity_main);
    19         findViewById( R.id.menu_1).setOnClickListener( this);
    20         findViewById( R.id.menu_2).setOnClickListener( this);
    21         findViewById( R.id.menu_3).setOnClickListener( this);
    22         findViewById( R.id.menu_4).setOnClickListener( this);
    23     }
    24 
    25 
    26     @Override
    27     public void onClick(View v) {
    28         if(null != mToast) {
    29             mToast.cancel();
    30         }
    31         switch(v.getId()) {
    32             case R.id.menu_1:
    33                 mToast = Toast.makeText( this, "red", Toast.LENGTH_SHORT);
    34                 break;
    35             case R.id.menu_2:
    36                 mToast = Toast.makeText( this, "yellow", Toast.LENGTH_SHORT);
    37                 break;
    38             case R.id.menu_3:
    39                 mToast = Toast.makeText( this, "green", Toast.LENGTH_SHORT);
    40                 break;
    41             case R.id.menu_4:
    42                 mToast = Toast.makeText( this, "blue", Toast.LENGTH_SHORT);
    43                 break;
    44         }
    45         mToast.show();
    46     }
    47 }

    2.自定义控件代码,MenuViewItem.java

     1 package com.test.view;
     2 
     3 import android.content.Context;
     4 import android.graphics.Bitmap;
     5 import android.graphics.Color;
     6 import android.graphics.drawable.BitmapDrawable;
     7 import android.graphics.drawable.Drawable;
     8 import android.graphics.drawable.StateListDrawable;
     9 import android.util.AttributeSet;
    10 import android.view.MotionEvent;
    11 import android.widget.FrameLayout;
    12 
    13 public class MenuViewItem extends FrameLayout {
    14 
    15      
    16 
    17     private int width = -1;
    18 
    19     private int height = -1;
    20 
    21     private Bitmap bitmap;
    22 
    23  
    24 
    25     public MenuViewItem(Context context) {
    26 
    27         super( context);
    28 
    29     }
    30 
    31  
    32 
    33     public MenuViewItem(Context context, AttributeSet attrs, int defStyle) {
    34 
    35         super( context, attrs, defStyle);
    36 
    37     }
    38 
    39  
    40 
    41     public MenuViewItem(Context context, AttributeSet attrs) {
    42 
    43         super( context, attrs);
    44 
    45     }
    46 
    47  
    48 
    49     @Override
    50 
    51     public boolean onTouchEvent(MotionEvent event) {
    52 
    53         int action = event.getAction();
    54 
    55         if(action != MotionEvent.ACTION_DOWN) {
    56 
    57             return super.onTouchEvent( event);
    58 
    59         }
    60 
    61         int x = (int)event.getX();
    62 
    63         int y = (int)event.getY();
    64 
    65         if(width == -1 || height == -1) {
    66 
    67             Drawable drawable = ((StateListDrawable)getBackground()).getCurrent();
    68 
    69             bitmap = ((BitmapDrawable)drawable).getBitmap();
    70 
    71             width = getWidth();
    72 
    73             height = getHeight();
    74 
    75         }
    76 
    77         if(null == bitmap || x < 0 || y < 0 || x >= width || y >= height) {
    78 
    79             return false;
    80 
    81         }
    82 
    83         int pixel = bitmap.getPixel( x, y);
    84 
    85         if(Color.TRANSPARENT == pixel) {
    86 
    87             return false;
    88 
    89         }
    90 
    91         return super.onTouchEvent( event);
    92 
    93     }
    94 
    95 }

    3.xml界面代码,activity_main.xml

     1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="fill_parent"
     4     android:layout_height="fill_parent"
     5     android:gravity="center"
     6     android:orientation="vertical" >
     7 
     8     <com.test.view.MenuViewItem
     9         android:id="@+id/menu_1"
    10         android:layout_width="wrap_content"
    11         android:layout_height="wrap_content"
    12         android:layout_gravity="center"
    13         android:background="@drawable/chrome_1" />
    14 
    15     <com.test.view.MenuViewItem
    16         android:id="@+id/menu_2"
    17         android:layout_width="wrap_content"
    18         android:layout_height="wrap_content"
    19         android:layout_gravity="center"
    20         android:background="@drawable/chrome_2" />
    21 
    22     <com.test.view.MenuViewItem
    23         android:id="@+id/menu_3"
    24         android:layout_width="wrap_content"
    25         android:layout_height="wrap_content"
    26         android:layout_gravity="center"
    27         android:background="@drawable/chrome_3" />
    28 
    29     <com.test.view.MenuViewItem
    30         android:id="@+id/menu_4"
    31         android:layout_width="wrap_content"
    32         android:layout_height="wrap_content"
    33         android:layout_gravity="center"
    34         android:background="@drawable/chrome_4" />
    35 
    36 </FrameLayout>

    4.图片控件代码,chrome_1.xml

    1 <?xml version="1.0" encoding="utf-8"?>
    2 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    3 
    4     <item android:drawable="@drawable/chrome_1_s" android:state_pressed="true"/>
    5     <item android:drawable="@drawable/chrome_1_n"/>
    6 
    7 </selector>

    5.图片资源:

  • 相关阅读:
    SQL Azure (17) SQL Azure V12
    Microsoft Azure News(5) Azure新DV2系列虚拟机上线
    Azure Redis Cache (3) 在Windows 环境下使用Redis Benchmark
    Azure PowerShell (11) 使用自定义虚拟机镜像模板,创建Azure虚拟机并绑定公网IP(VIP)和内网IP(DIP)
    Windows Azure Virtual Machine (31) 迁移Azure虚拟机
    Windows Azure Web Site (16) Azure Web Site HTTPS
    Azure China (12) 域名备案问题
    一分钟快速入门openstack
    管理员必备的Linux系统监控工具
    Keepalived+Nginx实现高可用和双主节点负载均衡
  • 原文地址:https://www.cnblogs.com/code4app/p/4495199.html
Copyright © 2011-2022 走看看