2016-02-02 3 views
2

Я только что создал пользовательскую кнопку и изменил различные состояния. Но когда я нажал кнопку (я попробовал на реальном устройстве), изменение формы задерживается, примерно 300 мс. Кто-нибудь знает, откуда это может произойти?Проблема с задержкой Android при нажатии кнопки

button.xml:

<?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/pressed_button_primary" /> 
    <item android:state_focused="true" android:drawable="@drawable/pressed_button_primary" /> 
    <item android:drawable="@drawable/normal_button_primary"/> 
</selector> 

normal_button_primary.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#FFCF01" /> 
</shape> 

pressed_button_primary.xml:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
    <solid android:color="#FEBF48" /> 
</shape> 

актив- ности:

public class MainActivity extends ActionBarActivity { 
    Button login_button; 
    Button signup_button; 
    private static final String CONSOLETAG = "consoleDebug : "; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // Click on signup button 
    signup_button = (Button) findViewById(R.id.signupButton); 
    signup_button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // Nothin 
     } 
    }); 

    // Click on login button 
    login_button = (Button) findViewById(R.id.loginButton); 
    login_button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      // Nothin 
     } 
    }); 
    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    return super.onOptionsItemSelected(item); 
    } 

    public void goToSignup(View view) { 
    Intent intent = new Intent(this, SignupActivity.class); 
    startActivity(intent); 
    } 
} 
+0

это может быть случай, когда вы нажимаете на кнопку, некоторые тяжелые операции продолжается. Вы можете это проверить? –

+0

Я проверил и нет операции, прикрепленной к клику. Я добавил ClickListener только для печати некоторого контента на консоль, и этот контент также печатает с задержкой на консоли –

+0

Возможно, также, что ваши изображения 'press_button_primary' и' normal_button_primary' имеют высокие разрешения, которые требуют времени для нагрузки. Пожалуйста, разместите разрешения изображений для лучшего понимания/ –

ответ

0

Найдено решение здесь: https://stackoverflow.com/a/22027628/658323

Проблема происходит потому, что система пытается определить, хотите ли вы, чтобы нажать на вид или выполнить событие прокрутки, поэтому он будет ждать некоторое время, прежде чем регистрировать событие как "press".

Решение зарегистрировать событие нажатия динамически из кода на ACTION_DOWN, сохраняя при этом XML-селектор, как это:

yourSelectableView.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
    switch (event.getActionMasked()) { 
     case MotionEvent.ACTION_DOWN: { 
     v.setPressed(true); 
     break; 
     } 
    } 
    return false; //we return false so that the click listener will process the event 
    } 
}); 
Смежные вопросы