У меня проблема с прокруткой изображений на диске, которые достаточно велики (около 1 МБ каждое). Теперь у меня проблема не в задержке между изображениями, а в том, что при загрузке изображения прокручивается изображение (которое я использую)сигнализировать об изменении) продолжает обнаруживаться, пока изображение загружается, что приводит к перемещению изображения при окончательной загрузкеМой вопрос прост.Есть ли способ подождать, пока изображение загрузится (таким образом я могу блокировать экранные команды, пока изображение не будет полностью загружено).
Спасибо за любые ответы!
PD: Кстати, язагружаю страницы в ImageView;
РЕДАКТИРОВАТЬ:
Отправка AsyincCode:
Это в моей тестовой деятельности itests.java
public class ImageLoader extends AsyncTask<String, Void, Void > {
private final ProgressDialog Loading = new ProgressDialog(itests.this);
protected void onPreExecute(){
Loading.setMessage("Loading...");
Loading.show();
}
@Override
protected Void doInBackground(String... params) {
pvm.setPages(params[0], params[1], params[2]);
return null;
}
protected void onPostExecute(Void... params){
if (Loading.isShowing()){
Loading.dismiss();
}
}
Теперь pvm - это мой PageViewManager (PageView - это мой пользовательский ImageView, который получает все мои сенсорные события)
Вот что он делает:
public void setPages(String left, String center, String right){
//if (!timer.isAlive()){
Left = left;
Center = center;
Right = right;
DoublePageMode = true;
toggleDoublePageMode();
System.err.println("Waiting...");
//centerPage.blockCommands();
//timer.start();
//}
}
@Override
public void toggleDoublePageMode(){
if (DoublePageMode){
//Going into Normal View
threePageLayout.setOrientation(LinearLayout.HORIZONTAL);
leftPage.setVisibility(View.VISIBLE);
LinearLayout.LayoutParams cll = new LinearLayout.LayoutParams(DWidth,DHeight);
LinearLayout.LayoutParams zero = new LinearLayout.LayoutParams(0,DHeight);
centerPage.setImage(Center, DWidth, DHeight, PageState.NORMAL);
centerPage.setLayoutParams(cll);
leftPage.setImage(Left, DWidth, DHeight, PageState.NORMAL);
leftPage.setLayoutParams(zero);
rightPage.setImage(Right, DWidth, DHeight, PageState.NORMAL);
rightPage.setLayoutParams(zero);
DoublePageMode = false;
}
else{
DoublePageMode = true;
threePageLayout.setOrientation(LinearLayout.VERTICAL);
leftPage.setVisibility(View.GONE);
LinearLayout.LayoutParams cll = new LinearLayout.LayoutParams(DWidth,DHeight,1f);
LinearLayout.LayoutParams zero = new LinearLayout.LayoutParams(DWidth,DHeight,1f);
centerPage.setImage(Center, DWidth, DHeight, PageState.TWOPAGEMODE);
centerPage.setLayoutParams(cll);
rightPage.setImage(Right, DWidth, DHeight, PageState.TWOPAGEMODE);
rightPage.setLayoutParams(zero);
}
}
Запись @Override заключается в том, что функция также должнавызываться из PageView на LongTouch.Однако я не делаю длинных нажатий, так что это не проблема.Поскольку AsyncTask пытается переместить макет действия, показывающего изображения, я получил сообщение об ошибке, которое я вам сказал. Это имеет смысл.
Когда мне нужно вызвать этот метод, он исходит из этого кода (в itests.java):
public void movePages(boolean next) {
//Code that initializes left,center,right
new ImageLoader().execute(left, center, right);
}
Этот метод вызывается PageViewManager (pvm) через интерфейс.
Надеюсь, это даст вам представление!
Большое спасибо!
EDIT2:
Я решил это!На самом деле больше похоже на то, что я нашел способ обойти это, но я прекрасно работаю!
Все, что я сделал, - это создал класс Timer, который позволяет мне знать, когда прошло определенное время.Когда мне нужно загрузить изображения, я запускаю его (это другой поток) и устанавливаю логическое значение, которое заставляет мои страницы игнорировать сенсорные события (возвращая false в onTouchEvent).Когда это будет сделано, я вызову функцию в моем pvm, которая просто снова установит для этого логического значения значение true, и эффект будет именно тем, что я хотел.Таймер ждет только около 500 миллисекунд.
Спасибо за помощь!