最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android使用TouchDelegate增加View的觸摸范圍

 更新時(shí)間:2018年05月26日 11:42:04   作者:sgwhp  
這篇文章主要為大家詳細(xì)介紹了Android使用TouchDelegate增加View的觸摸范圍,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了Android使用TouchDelegate增加View觸摸范圍的方法,供大家參考,具體內(nèi)容如下

還不知道TouchDelegate這個(gè)東西的可以先看一下API,這里大致說(shuō)一下它的作用:假設(shè)有兩個(gè)View,分別是v1,v2,我們可以通過(guò)v1的setTouchDelegate(bounds, v2)來(lái)委派觸摸事件,其中bounds是一個(gè)Rect。v1中,落在這個(gè)范圍的TouchEvent都會(huì)傳給v2。

既然是這樣,那我們可以通過(guò)設(shè)置某個(gè)view的parent的touchDelegate來(lái)達(dá)到擴(kuò)大這個(gè)view觸摸范圍的目的。關(guān)鍵是什么時(shí)候去執(zhí)行parent.setTouchDelegate()方法呢?要設(shè)置這個(gè)委派,必須得知道當(dāng)前view大小以及它在parent的位置。而這些數(shù)據(jù)都是在onLayout才能確定(注:如果不是自定義View,只是在Activity中設(shè)置,請(qǐng)將這些操作置于onWindowFocusChanged()方法中)。至此,實(shí)現(xiàn)的思路已經(jīng)很清晰了,我們通過(guò)自定義一個(gè)Button來(lái)檢驗(yàn)一下,下面開(kāi)始上代碼:

為了方便在xml中使用我們自定義的View,并且可以自定義擴(kuò)大的觸摸范圍,我們?cè)僮远x一個(gè)attrs,res/values/attrs.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
  <declare-styleable name="LargeTouchableAreaView"> 
    <attr name="addition" format="dimension" /> 
    <attr name="additionBottom" format="dimension" /> 
    <attr name="additionLeft" format="dimension" /> 
    <attr name="additionRight" format="dimension" /> 
    <attr name="additionTop" format="dimension" /> 
  </declare-styleable> 
</resources> 

Button實(shí)現(xiàn):

public class LargeTouchableAreasButton extends Button { 
  private final int TOUCH_ADDITION = 0; 
  private int mTouchAdditionBottom = 0; 
  private int mTouchAdditionLeft = 0; 
  private int mTouchAdditionRight = 0; 
  private int mTouchAdditionTop = 0; 
  private int mPreviousLeft = -1; 
  private int mPreviousRight = -1; 
  private int mPreviousBottom = -1; 
  private int mPreviousTop = -1; 
 
  public LargeTouchableAreasButton(Context context) { 
    super(context); 
  } 
 
  public LargeTouchableAreasButton(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(context, attrs); 
  } 
 
  public LargeTouchableAreasButton(Context context, AttributeSet attrs, 
      int defStyle) { 
    super(context, attrs, defStyle); 
    init(context, attrs); 
  } 
 
  private void init(Context context, AttributeSet attrs) { 
    TypedArray a = context.obtainStyledAttributes(attrs, 
        R.styleable.LargeTouchableAreaView); 
    int addition = (int) a.getDimension( 
        R.styleable.LargeTouchableAreaView_addition, TOUCH_ADDITION); 
    mTouchAdditionBottom = addition; 
    mTouchAdditionLeft = addition; 
    mTouchAdditionRight = addition; 
    mTouchAdditionTop = addition; 
    mTouchAdditionBottom = (int) a.getDimension( 
        R.styleable.LargeTouchableAreaView_additionBottom, 
        mTouchAdditionBottom); 
    mTouchAdditionLeft = (int) a.getDimension( 
        R.styleable.LargeTouchableAreaView_additionLeft, 
        mTouchAdditionLeft); 
    mTouchAdditionRight = (int) a.getDimension( 
        R.styleable.LargeTouchableAreaView_additionRight, 
        mTouchAdditionRight); 
    mTouchAdditionTop = (int) a.getDimension( 
        R.styleable.LargeTouchableAreaView_additionTop, 
        mTouchAdditionTop); 
    a.recycle(); 
  } 
 
  @Override 
  protected void onLayout(boolean changed, int left, int top, int right, 
      int bottom) { 
    super.onLayout(changed, left, top, right, bottom); 
    if (left != mPreviousLeft || top != mPreviousTop 
        || right != mPreviousRight || bottom != mPreviousBottom) { 
      mPreviousLeft = left; 
      mPreviousTop = top; 
      mPreviousRight = right; 
      mPreviousBottom = bottom; 
      final View parent = (View) this.getParent(); 
      parent.setTouchDelegate(new TouchDelegate(new Rect(left 
          - mTouchAdditionLeft, top - mTouchAdditionTop, right 
          + mTouchAdditionRight, bottom + mTouchAdditionBottom), this)); 
    } 
  } 
 
} 

然后在具體要使用到這個(gè)Button的xml中加上以下代碼:

xmlns:lta="http://schemas.android.com/apk/res/com.xxx.xxx" 

其中"lta"這個(gè)名字可以隨便取,最后的是你的app包名。
最后在這個(gè)Button中定義希望增大的尺寸:

<com.xxx.LargeTouchableAreasButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    lta:addition="30dp" /> 

大功告成。

但這個(gè)自定義的View并不是完美的,還存在以下問(wèn)題:

1、必須保證parent足夠大,如果自定義的范圍超出parent的大小,則超出的那部分無(wú)效。

2、一個(gè)parent只能設(shè)置一個(gè)觸摸委派,設(shè)置多個(gè)時(shí),只有最后設(shè)置的child有效。如果希望一個(gè)view能設(shè)置多個(gè)委派,需要再自定義parent,具體方法可參考:鏈接地址

總而言之,要觸發(fā)委派,必須保證parent接收到了觸摸事件,并且落在了你定義的范圍內(nèi)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android原生嵌入React Native詳解

    Android原生嵌入React Native詳解

    這篇文章主要為大家詳細(xì)介紹了Android原生嵌入React Native的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • Android TreeView實(shí)現(xiàn)帶復(fù)選框樹(shù)形組織結(jié)構(gòu)

    Android TreeView實(shí)現(xiàn)帶復(fù)選框樹(shù)形組織結(jié)構(gòu)

    這篇文章主要為大家詳細(xì)介紹了Android TreeView實(shí)現(xiàn)帶復(fù)選框樹(shù)形組織結(jié)構(gòu),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Android?內(nèi)存優(yōu)化知識(shí)點(diǎn)梳理總結(jié)

    Android?內(nèi)存優(yōu)化知識(shí)點(diǎn)梳理總結(jié)

    這篇文章主要介紹了Android?內(nèi)存優(yōu)化知識(shí)點(diǎn)梳理總結(jié),Android?操作系統(tǒng)給每個(gè)進(jìn)程都會(huì)分配指定額度的內(nèi)存空間,App?使用內(nèi)存來(lái)進(jìn)行快速的文件訪問(wèn)交互,長(zhǎng)時(shí)間如此便需要優(yōu)化策略,文章分享優(yōu)化知識(shí)點(diǎn)總結(jié),需要的朋友可以參考一下
    2022-06-06
  • 詳解Android中motion_toast的使用

    詳解Android中motion_toast的使用

    我們通常會(huì)用 toast(也叫吐司)來(lái)顯示提示信息,例如網(wǎng)絡(luò)請(qǐng)求錯(cuò)誤,校驗(yàn)錯(cuò)誤等等。本文為大家介紹一個(gè)非常有趣的toast組件 —— motion_toast,感興趣的可以了解一下
    2022-06-06
  • Android實(shí)現(xiàn)RecyclerView嵌套流式布局的詳細(xì)過(guò)程

    Android實(shí)現(xiàn)RecyclerView嵌套流式布局的詳細(xì)過(guò)程

    最近在做需求的時(shí)候,碰到有各種篩選項(xiàng)的界面,下面這篇文章主要給大家介紹了關(guān)于Android實(shí)現(xiàn)RecyclerView嵌套流式布局的詳細(xì)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Android實(shí)現(xiàn)微信分享帶有縮略圖的網(wǎng)頁(yè)

    Android實(shí)現(xiàn)微信分享帶有縮略圖的網(wǎng)頁(yè)

    最近做了一個(gè)web app的項(xiàng)目,要求分享web頁(yè)還要帶有圖片功能,怎么實(shí)現(xiàn)呢?今天小編給大家分享android實(shí)現(xiàn)微信分享帶有縮略圖的網(wǎng)頁(yè)功能,需要的朋友參考下
    2017-02-02
  • Android貝塞爾曲線初步學(xué)習(xí)第一課

    Android貝塞爾曲線初步學(xué)習(xí)第一課

    這篇文章主要為大家詳細(xì)介紹了Android貝塞爾曲線初步學(xué)習(xí)的第一課,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Android仿微信聯(lián)系人按字母排序

    Android仿微信聯(lián)系人按字母排序

    但凡涉及到聯(lián)系人界面,幾乎都是按照字母排序的,那么聯(lián)系人按字母排序是怎么實(shí)現(xiàn)的呢,下面小編就給大家詳解Android仿微信聯(lián)系人按字母排序,需要的朋友可以參考下
    2015-08-08
  • Flutter自動(dòng)路由插件auto_route使用詳解

    Flutter自動(dòng)路由插件auto_route使用詳解

    這篇文章主要為大家介紹了Flutter自動(dòng)路由插件auto_route的基本使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Android自定義View實(shí)現(xiàn)兩種二維碼的掃描效果

    Android自定義View實(shí)現(xiàn)兩種二維碼的掃描效果

    這篇文章主要為大家詳細(xì)介紹了Android如何自定義View實(shí)現(xiàn)兩種二維碼的掃描效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01

最新評(píng)論

英山县| 潼南县| 正宁县| 宁安市| 江门市| 五台县| 卢湾区| 衡阳市| 定结县| 正阳县| 榕江县| 永仁县| 广平县| 平昌县| 濮阳县| 祁阳县| 文山县| 班戈县| 盖州市| 潼关县| 石屏县| 肥西县| 股票| 石河子市| 固安县| 安仁县| 山东省| 定边县| 阿尔山市| 庆阳市| 建瓯市| 麟游县| 射洪县| 大厂| 大关县| 齐河县| 安图县| 井研县| 庆城县| 河间市| 锡林郭勒盟|