Как создать переменную, чтобы активность знала, выбирается ли изображение? - PullRequest
0 голосов
/ 22 июля 2011

У меня есть 4 метода для получения URL-адресов, а затем Imageloader загружает изображения.

Изображения устанавливаются в виде галереи.

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

КАК я могу создать что-то для тестирования и предотвратить перезагрузку изображений, когда изображения не видны?

Вот код, который загружает изображения .. Полный класс.

    if(Build.VERSION.SDK_INT >= 11){
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
    }


   myGames.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            startActivity(n);

        }
    });
    gameNews.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

        }
    }); 

    //Executing AsyncTask in background thread to get game images.
    MyTask myTask = new MyTask();

    myTask.execute();

}
 //Method to get images from text documents that will by updated every month.


public void getImages() throws IOException{


    DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImages.txt");
    HttpResponse response;

        response = httpclient.execute(httppost);


            HttpEntity ht = response.getEntity();

            BufferedHttpEntity buf = new BufferedHttpEntity(ht);

            InputStream is = buf.getContent();


            BufferedReader r = new BufferedReader(new InputStreamReader(is));

            StringBuilder total = new StringBuilder();
            String line;
            while ((line = r.readLine()) != null) {
                total.append(line + "\n");

              imageUrl = total.toString();
              Log.v("getImage1", "Retreived image");
            }
     }



            public void getImage2() throws IOException{

                DefaultHttpClient httpclient = new DefaultHttpClient();

                HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImage2.txt");
                HttpResponse response;


                    response = httpclient.execute(httppost);


                        HttpEntity ht = response.getEntity();

                        BufferedHttpEntity buf = new BufferedHttpEntity(ht);

                        InputStream is = buf.getContent();


                        BufferedReader r = new BufferedReader(new InputStreamReader(is));

                        StringBuilder total = new StringBuilder();
                        String line;
                        while ((line = r.readLine()) != null) {
                            total.append(line + "\n");

                          imageUrl2 = total.toString();
                          Log.v("getImage2", "Retreived image");
                        }
                }



                        public void getImage3() throws IOException{

                            DefaultHttpClient httpclient = new DefaultHttpClient();

                            HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webimage3.txt");
                            HttpResponse response;


                                response = httpclient.execute(httppost);


                                    HttpEntity ht = response.getEntity();

                                    BufferedHttpEntity buf = new BufferedHttpEntity(ht);

                                    InputStream is = buf.getContent();


                                     BufferedReader r = new BufferedReader(new InputStreamReader(is));

                                    StringBuilder total = new StringBuilder();
                                    String line;
                                    while ((line = r.readLine()) != null) {
                                        total.append(line + "\n");

                                      imageUrl3 = total.toString();
                                      Log.v("getImage3", "Retreived image");
                                    }

                        }

                        public void getImage4() throws IOException{

                            DefaultHttpClient httpclient = new DefaultHttpClient();

                            HttpGet httppost = new HttpGet("https://sites.google.com/site/theitrangers/images/webImage4.txt");
                            HttpResponse response;


                                response = httpclient.execute(httppost);


                                    HttpEntity ht = response.getEntity();

                                    BufferedHttpEntity buf = new BufferedHttpEntity(ht);

                                    InputStream is = buf.getContent();


                                    BufferedReader r = new BufferedReader(new InputStreamReader(is));

                                    StringBuilder total = new StringBuilder();
                                    String line;
                                    while ((line = r.readLine()) != null) {
                                        total.append(line + "\n");

                                      imageUrl4 = total.toString();


                            }
}

                        //ImageAdapter that gets the URL of the images and put them in a format to be set to gallery
            public class ImageAdapter extends BaseAdapter {
                /** The parent context */
                private Context myContext;public ImageAdapter() {
                    // TODO Auto-generated constructor stub
                }
                /** URL-Strings to some remote images. */

                public String[] myRemoteImages = {imageUrl,imageUrl2,imageUrl3,imageUrl4};






                /** Simple Constructor saving the 'parent' context. */
                public ImageAdapter(Context c) { this.myContext = c; }





                /** Returns the amount of images we have defined. */
                public int getCount() { return this.myRemoteImages.length; }

                /* Use the array-Positions as unique IDs */
                public Object getItem(int position) { return position; }
                public long getItemId(int position) { return position; }

                /** Returns a new ImageView to
                * be displayed, depending on
                * the position passed. */
                public View getView(int position, View convertView, ViewGroup parent) {
                ImageView i = new ImageView(this.myContext);

                try {

                                URL aURL = new URL(myRemoteImages[position]);
                                URLConnection conn = aURL.openConnection();

                                conn.connect();

                                InputStream is = conn.getInputStream();  
                                /* Buffered is always good for a performance plus. */
                                BufferedInputStream bis = new BufferedInputStream(is);
                                /* Decode url-data to a bitmap. */

                                Bitmap bm = BitmapFactory.decodeStream(bis);
                                bis.close();
                                is.close();
                                Log.v(imageUrl, "Retrieving image");

                                /* Apply the Bitmap to the ImageView that will be returned. */
                                i.setImageBitmap(bm);
                        } catch (IOException e) {

                                Log.e("DEBUGTAG", "Remtoe Image Exception", e);
                        }

                /* Image should be scaled as width/height are set. */
                i.setScaleType(ImageView.ScaleType.FIT_CENTER);
                /* Set the Width/Height of the ImageView. */
                i.setLayoutParams(new Gallery.LayoutParams(150, 150));
                return i;
                }

                /** Returns the size (0.0f to 1.0f) of the views
                * depending on the 'offset' to the center. */
                public float getScale(boolean focused, int offset) {
                /* Formula: 1 / (2 ^ offset) */
                return Math.max(0, 1.0f / (float)Math.pow(2, Math.abs(offset)));
                }
                } 





            //the important AsyncTask method. running the background thread to get the images and set them to the gallery.
                private class MyTask extends AsyncTask<Void, Void, Void>{


                @Override
                protected Void doInBackground(Void... arg0) {try {
                            getImages();
                            Log.v("MyTask", "Image 1 retreived");
                            getImage2();
                            Log.v("MyTask", "Image 2 retreived");
                            getImage3();
                            Log.v("MyTask", "Image 3 retreived");
                            getImage4();
                            Log.v("MyTask", "Image 4 retreived");
                        } catch (IOException e) {
                            Log.e("MainMenu retreive image", "Image Retreival failed");
                            e.printStackTrace();
                        }
                    return null;
                }
                @Override

                protected void onPostExecute(Void notUsed){
                    ((Gallery) findViewById(R.id.gallery))
                          .setAdapter(new ImageAdapter(MainMenu.this));


                }

                        }

}

1 Ответ

0 голосов
/ 22 июля 2011

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

...