2014-09-16 1 views
0

У меня есть ImageView И кнопка и 2 изображения. Нажатие кнопки приводит к переключению изображений в ImageView.Уменьшить время загрузки изображения в ImageView в Android

Вот код

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

     Button button1 = (Button) findViewById(R.id.button1); 
     button1.setOnClickListener(this); 

     flag = true; 
     imageView1 = (ImageView) findViewById(R.id.imageView1); 
     imageView1.setImageResource(R.drawable.off); 

    } 

    @Override 
    public void onClick(View v) 
    { 
     // TODO Auto-generated method stub 

    // imageView1.setImageResource(R.id.); 
     //imageView1.setImageResource(R.drawable.off_widget); 
      flag= !flag; 
     if(flag == true ) 
     { 
      imageView1.setImageResource(R.drawable.off); 
     } 
     else 
     { 
      imageView1.setImageResource(R.drawable.on); 
     } 

Но время загрузки огромен. Размер изображения составляет 188 КБ и 110 КБ. Что я могу сделать, чтобы уменьшить время загрузки?

ответ

0

Проблема здесь не в времени загрузки, даже 200 КБ изображений не так уж и много. Ваш графический интерфейс фактически замерзает на короткое время (время загрузки изображения), вызванное загрузкой изображения. Это вызывает переключение.

Лучше всего здесь, чтобы предотвратить GUI от замерзания загружается изображение в AsyncTask как Drawable и потом назначить его на ImageView. Вы можете найти пример кода here. Вы просто вызываете задачу из своего onCreate(...) или onStart(...). Другая лучшая практика для geeting Drawable от AsyncTask к вам основная Деятельность осуществляется с помощью Observer Pattern, где ваш AsyncTask является Observer, а ваша основная деятельность - наблюдаемая. Android уже предоставляет классы prober для этого. Вы также можете найти пример кода here.

+0

Класс «AsyncTask» позволяет нам выполнять длинные/фоновые операции и показывать результат в потоке пользовательского интерфейса без необходимости манипулировать потоками. – Rustam

+0

Что не так с этим? – Westranger

+0

по мне не имеет смысла использовать 'AsyncTast' для вышеуказанного вопроса. – Rustam

0

Где вы разместили фотографии и изображения? Вы создали масштабированную версию для каждой плотности экрана?

Когда вы добавляете 100kb изображение в выпадающий каталог (вместо drawable), изображение будет обрабатываться как изображение mdpi и, следовательно, масштабируется до плотности вашего устройства. Таким образом, png в выпадающем каталоге занимает гораздо больше памяти на устройстве xxhdpi, чем 100kb.

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