2016-09-01 3 views
2

Я знаю, что этот вопрос задан раньше, и я прошел через них, но они не решили мою проблему.Как я могу прокрутить ScrollView

У меня есть ScrollView с одним LinearLayout с изображением. И я использовал ontouchListner для ImageView, чтобы дать им нажмите эффект, как этот

switch (motionEvent.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      view.getBackground().setColorFilter(0xCCCDDC39, PorterDuff.Mode.SRC_ATOP); 
      view.invalidate(); 
      break; 
     case MotionEvent.ACTION_CANCEL: 
     case MotionEvent.ACTION_UP: 
      view.getBackground().clearColorFilter(); 
      view.invalidate(); 
      startActivity(view.getId()); 
      break; 
} 

Но проблема в том, когда я прокручивать ontouchlistner призываемый ImageView и изображение получает щелкнул .Я не хочу, это всякий раз, когда я прокрутке, потому что это делает не позволяйте мне прокручивать. Пожалуйста, помогите

+0

Попробуйте использовать 'onClickListener' вместо сенсорного слушателя для обработки события нажатия и' selector' изменить цвет вид на клик. –

+0

Я пробовал, что это не дает эффекта, который я хочу. например, когда пользователь нажимает и удерживает значок, он должен быть зеленым, пока пользователь не покинет значок. Этот эффект не может быть достигнут с помощью onClickListner – FaisalAhmed

+0

Вы также использовали 'селектор'? Вы можете динамически устанавливать два изображения для нажатого и нормального состояния программно. Обратитесь к этому: http://stackoverflow.com/questions/12754067/dynamically-defining-and-using-selectors –

ответ

2

Ну, вы можете использовать OnScrollChangedListener, чтобы прослушать, когда ваш свиток меняет. Образец кода, как:

scrollView.getViewTreeObserver().addOnScrollChangedListener(new OnScrollChangedListener() { 
    @Override 
    public void onScrollChanged() { 
     int scrollY = rootScrollView.getScrollY(); // For ScrollView 
     int scrollX = rootScrollView.getScrollX(); // For HorizontalScrollView 
     // DO SOMETHING WITH THE SCROLL COORDINATES 
    } 
}); 
+0

, когда будет вызываться scrollchanged? Я имею в виду, что он будет вызываться, когда пользователь заканчивает прокрутку? или он будет вызываться всякий раз, когда пользователь прокручивается? – FaisalAhmed

+0

И в моем ответе. Он вызывается, когда пользователь прокручивает его. Если вы хотите обнаружить событие, свиток заканчивается. Давайте посмотрим на ответ на http://stackoverflow.com/questions/10316743/detect-end-of-scrollview – Jame

+0

Таким образом, этот код вызывает listner всякий раз, когда пользователь прокручивает, но в этом случае ontouch listner вызывается до того, как я думаю, потому что сначала я нажимаю на значок, затем прокручиваю – FaisalAhmed

3

Если я правильно понимаю ваш вопрос, вы можете использовать onClickListener и selector для достижения этой цели. Также вам не нужно сохранять дублированный набор изображений для выбранного состояния. Вы можете создать селектор динамически как этот

 StateListDrawable states = new StateListDrawable(); 
     Drawable drawable = ContextCompat.getDrawable(this, R.drawable.your image); 
     drawable.setColorFilter(0xCCCDDC39, PorterDuff.Mode.SRC_ATOP); 
     states.addState(new int[] {android.R.attr.state_pressed}, drawable); 
     yourView.setBackground(states); 
+0

Я должен сделать это для всех изображений – FaisalAhmed

+0

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

+0

Какое изображение R.drawable.your Изображение? – FaisalAhmed

0

верный короткий asnwer

scroll.setOnScrollChangeListener(new View.OnScrollChangeListener() { 
     @Override 
     public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { 


        int x = scrollY - oldScrollY; 
        if (x > 0) { 
         //scroll up 
        } else if (x < 0) { 
         //scroll down 
        } else { 

        } 

     } 
    }); 
Смежные вопросы