代码之家  ›  专栏  ›  技术社区  ›  Developer

Android数据绑定视图。onTouchListener

  •  2
  • Developer  · 技术社区  · 7 年前

    Android

    <Button android:onClick="@{handler.someButtonClick()}"/>
    

    在其 Handler class 它的听众会是这样的:

    public View.OnClickListener someButtonClick() {
            return new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                }
            };
        }
    

    OnTouchListener Button 我可以知道当按下按钮和释放按钮时

    例如:

    // Check if the button is PRESSED
    if (event.getAction() == MotionEvent.ACTION_DOWN){
         //do some thing          
    }// Check if the button is RELEASED
    else if (event.getAction() == MotionEvent.ACTION_UP) {
        //do some thing                     
    }
    

    3 回复  |  直到 7 年前
        1
  •  6
  •   Nouman Ch    5 年前

    这里有一个解决方法,你可以用它来做这件事。

    @BindingAdapter("touchListener")
    public void setTouchListener(View self,boolean value){
        self.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                // Check if the button is PRESSED
                if (event.getAction() == MotionEvent.ACTION_DOWN){
                    //do some thing
                }// Check if the button is RELEASED
                else if (event.getAction() == MotionEvent.ACTION_UP) {
                    //do some thing
                }
                return false;
            }
        });
    }
    

    <Button  app:touchListener="@{true}"/>
    
        2
  •  2
  •   Ahmad Aghazadeh    6 年前

    视图模型

    public class RecyclerViewModel   {
          public View.OnTouchListener onTouchListener;
    
          public void setOnTouchListener( View.OnTouchListener onTouchListener) {
              this.onTouchListener = onTouchListener;
          }
    }
    

    数据绑定

    @BindingAdapter("onTouchListener")
    public static void setOnTouchListener(View view, View.OnTouchListener onTouchListener) {
        if (onTouchListener != null)
            view.setOnTouchListener(onTouchListener);
    }
    

    <Button app:onTouchListener="@{viewModel.onTouchListener}"/>
    
        3
  •  0
  •   Andrey    3 年前

    视图模型

    private var tapTime: Long = 0
    
    fun onTouchListener(view:View, event: MotionEvent): Boolean {
       when (event.action) {
          MotionEvent.ACTION_DOWN -> {
              tapTime = Date().time
              // more commands for touch down event
          } 
          MotionEvent.ACTION_UP -> {
             if (Date().time - tapDate < 300) {
                view.performClick()
               // more commands if click event
             } else {
               // any commands if holded toch on screen
             } 
         }
      }
      return true
    }
    

    <Button
       ...
       app:onTouchListener="@{viewModel.onTouchListener}"
       ...
      />
    

    警告 您需要在ViewModel中使用正确的签名:

    fun name(view:View, event: MotionEvent): Boolean
    

    app:onTouchListener