2015-12-10 2 views
1

Я работаю над проектом, который использует onTouchEvent (событие MotionEvent) для обработки события одного крана, когда я нажимаю экран, он скроет кнопку и снова появится когда вы снова нажмете. Я очень новичок в андроиде. Приложение отлично работает на моем lg-устройстве, которое работает на Kitkat, но не на моем samsung, который работает на Lollipop. Я провел почти 2 дня, исследуя это, но не повезло. Это, как я это сделал ...Single Tap работает отлично в другом устройстве, но не в каждом устройстве с использованием студии Android

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 

     case MotionEvent.ACTION_MOVE: { 
      return false; 
     } 
     case MotionEvent.ACTION_DOWN: { 
      x1 = event.getX(); 
      y1 = event.getY(); 
      break; 
     } 
     case MotionEvent.ACTION_UP: { 
      x2 = event.getX(); 
      y2 = event.getY(); 

      diffx = x2 - x1; 
      diffy = y2 - y1; 

      boolean sameX = x2 + tolerance > event.getX() && x2 - tolerance < event.getX(); 
      boolean sameY = y2 + tolerance > event.getY() && y2 - tolerance < event.getY(); 
      if (sameX && sameY) { 

       if (gone == false) { 

        pages.setVisibility(View.GONE); 
        lib.setVisibility(View.GONE); 

        final Animation slide_out_up = AnimationUtils.loadAnimation(this, R.anim.slide_out_up); 
        lib.startAnimation(slide_out_up); 

        final Animation slide_out_down = AnimationUtils.loadAnimation(this, R.anim.slide_out_down); 
        pages.startAnimation(slide_out_down); 

        gone = true; 
       } else { 

        pages.setVisibility(View.VISIBLE); 
        lib.setVisibility(View.VISIBLE); 

        final Animation slide_in_down = AnimationUtils.loadAnimation(this, R.anim.slide_in_down); 
        lib.startAnimation(slide_in_down); 

        final Animation slide_in_up = AnimationUtils.loadAnimation(this, R.anim.slide_in_up); 
        pages.startAnimation(slide_in_up); 
        gone = false; 
       } 
      } 
      break; 
     } 
    } 
    return false; 
    } 

и это мой Gradle ...

apply plugin: 'com.android.application' 
android { 
compileSdkVersion 22 
buildToolsVersion "23.0.1" 

defaultConfig { 
    applicationId "com.civitas.christian.fragments" 
    minSdkVersion 17 
    targetSdkVersion 22 
    versionCode 1 
    versionName "1.0" 
} 
buildTypes { 
    release { 
     minifyEnabled false 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
    } 
}} 
dependencies { 
compile fileTree(dir: 'libs', include: ['*.jar']) 
compile 'com.android.support:appcompat-v7:22.2.1'} 

я действительно нужна помощь плохо ..

+0

Почему вы используете сенсорное событие ... вместо нажатия кнопки? –

+0

@HetalUpadhyay, я думаю, из-за ==== >>>, когда я нажимаю экран, он скроет кнопку и снова появится, когда вы снова коснетесь. – user1140237

+0

ok ... вы хотите, чтобы на экране не касался кнопки ... правильно? –

ответ

0

Вы можете изменить onTouchEvent для обработки других элементов управления нажмите и потрогать

public class MYTest extends FragmentActivity { 
    Button btnShowHide; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 
     btnShowHide = (Button) findViewById(R.id.btnShowHide); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (event.getAction() == MotionEvent.ACTION_UP) { 
      //If you wants to use animation start animation here 
      // & you can show/hide object on end animation 
      if (btnShowHide.getVisibility() == View.VISIBLE) { 

       btnShowHide.setVisibility(View.GONE); 
      } else { 
       btnShowHide.setVisibility(View.VISIBLE); 
      } 
     } 
     //// Based on the requirement you can give return boolean 
     // to handle click & other controls touch event 
     return super.onTouchEvent(event); 
    } 
} 

Для анимации Start & конца обратного вызова у слушателя, пожалуйста, проверьте-

Смежные вопросы