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.图片资源:

  • 相关阅读:
    android 源码下载(Windows+Linux)
    Android Studio依赖包冲突 Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'.
    深入了解Java--1 绪论
    Android Studio 找不到R文件解决方法汇总
    Git学习历程
    word自动生成目录左对齐(缩进)问题
    Android Studio simpleUML(UML工具)使用详解
    android studio 常用快捷键
    当我们提起“女性权益”的时候,我们到底指的是什么?
    weakref模块和弱引用
  • 原文地址:https://www.cnblogs.com/code4app/p/4495199.html
Copyright © 2011-2022 走看看