2011-10-11 103 views
2

我想滥用标准按钮作为切换按钮,但只有当它的longpressed。因此,我首先将背景图像替换为默认样式,以获得按下,聚焦和默认状态。Android按钮setPressed不会改变动画

<?xml version="1.0" encoding="utf-8"?> 
    <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <item android:state_pressed="true" android:drawable="@drawable/btn_pressed" /> <!-- pressed --> 
     <item android:state_focused="true" android:drawable="@drawable/btn_focused" /> <!-- focused --> 
     <item android:drawable="@drawable/btn_default" /> <!-- default --> 

    </selector> 

我实现两者onClickListener和OnLongClickListener如下:

private OnLongClickListener mFireHoldListener = new OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View view) { 
     Log.i(TAG, "Long FIRE"); 

     Button btn = (Button) view; 
     btn.setPressed(true); 
     btn.invalidate(); 
     Log.i(TAG, "isPressed: " + btn.isPressed()); 

     return false; 
    } 

}; 

如果我执行长按,按键不其背景更改为state_pressed。我怎样才能保持按钮按下?使用切换按钮不起作用,因为应该可以进行正常的点击操作。如果按钮按下的时间较长,则该按钮会“锁定”。

非常感谢

+1

上长按代替btn.setPressed(真),它works.It的正确方法;与btn.setBackgroungResource(R.drawable.btn_pressed); –

+0

非常感谢,它的作品。我不确定它是否是'干净'的方式,但它迄今给我带来了期望的结果。 – Alx

回答

4

所以最后为comparred使按钮状态deliberatly真正

@Override 
    public boolean onLongClick(View view) { 
     final Button btn = (Button) view; 
     btn.post(new Runnable(
      public void run() { 
       btn.setBackgroungResource(R.drawable.btn_pressed); 
      } 
     } 

     return false; 
    }