#android
#Android
Вопрос:
Я пытался использовать setCallbackDuringFling для обновления некоторого индикатора во время просмотра галереи, и каким-то образом, всякий раз, когда я устанавливаю для него значение (true), он заикается. Когда я говорю «заикание», я имею в виду, что следующее изображение прыгает / щелкает в поле зрения, таким образом, изображение очень нервное во время броска. Даже когда я перетаскиваю его очень медленно, появляется следующее изображение, затем, когда оно на полпути, оно встает на место.
Однако, если я установлю для него значение false (таким образом, onItemSelected все равно вызывается, но только один раз, когда бросок останавливается), прокрутка / бросок происходит очень плавно.
Мой onItemSelected (см. Код ниже) совсем не интенсивный, поэтому я подозреваю, что заикание вызвано чем-то за кулисами.
Есть идеи по решению этой проблемы?
Заранее спасибо.
// Set up Gallery listeners
myGallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
// When scrolling stops, set the indicators
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
ImageView myIV;
// First reset myCurrentDot
myIV = (ImageView) findViewById (myDotID[myCurrentDot]);
myIV.setImageResource(R.drawable.grey);
// The set the "position" dot to red
myIV = (ImageView) findViewById (myDotID[position]);
myIV.setImageResource(R.drawable.red);
// update myCurrentDot
myCurrentRedDot = position;
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}); // End Gallery Listener
Ответ №1:
При setCallbackDuringFling()
вызове с true
, каждый раз, когда выбирается элемент, он onItemSelected
вызывается в вашем AdapterView.OnItemSelectedListener
экземпляре.
Глядя на ваш код, мы можем видеть, что findViewById()
вызывается дважды. Возможно, поиск представления — слишком сложный процесс. Возможно, вместо того, чтобы каждый раз выполнять поиск в представлениях, вы можете использовать механизм кэширования представлений. Просто замените кэш идентификаторов макета ( myDotID
) на кэш просмотра ( ImageView[] myDotViews
).