2013-05-27 2 views
7

Итак, я использую завиток страницы от harism, https://github.com/harism/android_page_curl и успешно реализовал его для загрузки изображений через веб-потоки. Но я не могу заставить его работать, когда я вернусь к предыдущим изображениям или страницам, поскольку изображения не идут с правильным индексом. то есть они не освежают должным образом. Я не могу понять это.Страница скручивания слева направо android

Это моя реализация, где я загружать изображения в PageProvider

private class PageProvider implements CurlView.PageProvider { 


     @Override 
     public int getPageCount() { 
      return data1.size()-1; 
     } 

     private Bitmap loadBitmap(int width, int height, final int index) throws MalformedURLException, IOException { 
      Bitmap b = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888); 
      b.eraseColor(0xFFFFFFFF); 
      Canvas c = new Canvas(b); 

      System.out.println("value of current page index "+mCurlView.getCurrentIndex()+" and index is "+index); 

      System.out.println("url forward"); 
      aq.ajax(data1.get(index+1), Bitmap.class,0, new AjaxCallback<Bitmap>() { 

       @Override 
       public void callback(String url, Bitmap object, AjaxStatus status) { 
        if(object!=null) 
          try { 
           System.out.println("url image downloaded "+url); 
           y=object; 

           aq.ajax(data1.get(index).replace(".png", ".mp3"), File.class,0,new AjaxCallback<File>() { 
            @Override 
            public void callback(String url, File object, AjaxStatus status) { 

             System.out.println("url sound downloaded "+url); 
             try { 
               if(object!=null) 
               {  
               FileInputStream inputStream = new FileInputStream(object); 

               if(index>0) 
               { 
                mPlayer.stop(); 
                mPlayer.reset(); 
               } 

               prepareMediaPlayer(inputStream.getFD()); 
               inputStream.close(); 
               } 
              } 
             catch (Exception e) {} 
            } 
           });  
         } catch (Exception e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
       } 
      }); 


      d = new BitmapDrawable(getResources(),y); 

      if(y!=null) 
      { 
      int margin = 7; 
      int border = 3; 
      Rect r = new Rect(margin, margin, width - margin, height - margin); 

      int imageWidth = r.width() - (border * 2); 
      int imageHeight = imageWidth * d.getIntrinsicHeight() 
        /d.getIntrinsicWidth(); 
      if (imageHeight > r.height() - (border * 2)) { 
       imageHeight = r.height() - (border * 2); 
       imageWidth = imageHeight * d.getIntrinsicWidth() 
         /d.getIntrinsicHeight(); 
      } 

      r.left += ((r.width() - imageWidth)/2) - border; 
      r.right = r.left + imageWidth + border + border; 
      r.top += ((r.height() - imageHeight)/2) - border; 
      r.bottom = r.top + imageHeight + border + border; 

      Paint p = new Paint(); 
      p.setColor(0xFFC0C0C0); 
      c.drawRect(r, p); 
      r.left += border; 
      r.right -= border; 
      r.top += border; 
      r.bottom -= border; 

      d.setBounds(r); 
      d.draw(c); 
      } 
      //} 
      if(y==null) 
      return null; 

      else 
      return b; 
     } 

     @Override 
     public void updatePage(CurlPage page, final int width, final int height, final int index) { 

       Bitmap front = null; 

       System.out.println("motion/index value /countIteration/size of map "+motionDirection+"/"+index+"/"+countIteration+"/"+imageFilexxSm.size()); 

       try { 


        front=loadBitmap(width, height,index); 

        if(front!=null) 
        { 
        page.setTexture(front, CurlPage.SIDE_FRONT); 
        page.setColor(Color.rgb(180, 180, 180), CurlPage.SIDE_BACK); 
        } 

       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       }}} 

Кроме того, я попытался установить индекс, используя getCurrentIndex метод, который предусмотрен внутри класса CurlView, но он даже не работает. Обнаружили, что индекс передается правильно, но растровые изображения не обновляются.

Яснее проблема:

Когда я перехожу в прямом направлении т.е. 1-й, 2-й, 3-й, 4-й, 5-й ... образы и правильно звучит работает, но когда я делаю обратный 5-й, 4-й, 3-й, 2-й, 1-й, затем только 5-й и 4-й кривые правы, но 3-й, 2-й и 1-й не работают. Почему это происходит?

ответ

2

Надеюсь, это сэкономит время, если вы пользуетесь библиотекой изображений с curl страницы harism.

Итак, после долгих исследований я обнаружил, что библиотека imageloading я использую (aquery) получил методы, т.е. getCachedImage(String url), getCachedFile(String url) который не работает на резьбе и вернуть null, если файл уже не кэшируются в любой место хранения (sdcard, cache каталог).

Кусок кода, который был актуален сделал это для меня,

private class PageProvider implements CurlView.PageProvider { 


    @Override 
    public int getPageCount() { 
     return data1.size()-1; 
    } 

    private Bitmap loadBitmap(int width, int height, final int index) throws MalformedURLException, IOException { 
     Bitmap b = Bitmap.createBitmap(width, height,Bitmap.Config.ARGB_8888); 
     b.eraseColor(0xFFFFFFFF); 
     Canvas c = new Canvas(b); 

     System.out.println(" Index is : "+index+" Curl state : "+CurlActivity.motionDirection); 

     if(index==data1.size()) 
     { 
     lastPage=false; 
     } 

     else 
     { 
     lastPage=true; 
     } 

     if(CurlActivity.motionDirection==11) 
      { 
       y=aq.getCachedImage(data1.get(index)); 
       f=aq.getCachedFile(data1.get(index+1).replace(".png", ".mp3")); 

       if(f!=null) 
       { 
       FileInputStream inputStream = new FileInputStream(f); 

       if(index>0) 
        { 
         mPlayer.stop(); 
         mPlayer.reset(); 
        } 

       prepareMediaPlayer(inputStream.getFD()); 
       inputStream.close(); 
       } 
      } 

      else 
      { 
       y=aq.getCachedImage(data1.get(index)); 

       if(jump==0) 
       { 
        f=aq.getCachedFile(data1.get(index).replace(".png", ".mp3")); 
       } 

       else 
       { 
        f=aq.getCachedFile(data1.get(index+1).replace(".png", ".mp3")); 
       } 


       if(y!=null&&f!=null) 
       { 
       FileInputStream inputStream = new FileInputStream(f); 

       if(index>0) 
        { 
         mPlayer.stop(); 
         mPlayer.reset(); 
        } 
       prepareMediaPlayer(inputStream.getFD()); 
       inputStream.close(); 
       } 

       else if(y!=null && f == null) 
       { 
        duration=1000; 
       } 

       else 
       { 
       aq.progress(R.id.progress).ajax(data1.get(index+1), Bitmap.class,0, new AjaxCallback<Bitmap>() { 
       @Override 
       public void callback(final String urlimg, final Bitmap object1, AjaxStatus status) { 
        if(object1!=null) 
          try { 
           y=object1; 

           aq.ajax(data1.get(index).replace(".png", ".mp3"), File.class,0,new AjaxCallback<File>() { 
            @Override 
            public void callback(String url, File object, AjaxStatus status) { 

             System.out.println("url sound downloaded "+url+status.getCode()); 
             try { 
               if(object!=null||status.getCode()==404) 
               { 
               FileInputStream inputStream = new FileInputStream(object); 

               if(index>0) 
               { 
                mPlayer.stop(); 
                mPlayer.reset(); 
               } 

               prepareMediaPlayer(inputStream.getFD()); 
               inputStream.close(); 
               } 
              } 
             catch (Exception e) {} 
            } 
           });  
         } catch (Exception e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
       } 
      }); 
      }  
     } 

     d = new BitmapDrawable(getResources(),y); 

     if(y!=null) 
     { 
     int margin = 7; 
     int border = 3; 
     Rect r = new Rect(margin, margin, width - margin, height - margin); 

     int imageWidth = r.width() - (border * 2); 
     int imageHeight = imageWidth * d.getIntrinsicHeight() 
       /d.getIntrinsicWidth(); 
     if (imageHeight > r.height() - (border * 2)) { 
      imageHeight = r.height() - (border * 2); 
      imageWidth = imageHeight * d.getIntrinsicWidth() 
        /d.getIntrinsicHeight(); 
     } 

     r.left += ((r.width() - imageWidth)/2) - border; 
     r.right = r.left + imageWidth + border + border; 
     r.top += ((r.height() - imageHeight)/2) - border; 
     r.bottom = r.top + imageHeight + border + border; 

     Paint p = new Paint(); 
     p.setColor(0xFFC0C0C0); 
     c.drawRect(r, p); 
     r.left += border; 
     r.right -= border; 
     r.top += border; 
     r.bottom -= border; 

     d.setBounds(r); 
     d.draw(c); 
     } 

     return b; 
    } 

    @Override 
    public void updatePage(CurlPage page, final int width, final int height, final int index) { 
      mPlayer.stop(); 
      mPlayer.reset(); 

      Bitmap front = null; 

      try { 

       front=loadBitmap(width, height,index); 

       if(front!=null) 
       { 
       page.setTexture(front, CurlPage.SIDE_FRONT); 
       page.setColor(Color.rgb(180, 180, 180), CurlPage.SIDE_BACK); 
       } 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 

     } 
} 
+0

http://stackoverflow.com/questions/16959530/curlview-get-the-position-of-the-image-clicked Можно проверить эту тему! –

2

hm ... curlpage by harism имеет поведение при загрузке изображения более одного при переворачивании страницы, например, если вы перелистываете страницу с 0 на 1, curlpage загрузит изображение для страниц 1 и 2, а если вы перейдете на страницу 5 curlpage будет загружать изображения на странице 5 и 6, но если вы листать назад на страницу 4, curlpage будет загружать изображения на странице 4, стр 3 и страницы 2.

loadImage() срабатывает, когда onTouch ACTION.MOVE, так что вы должны подготовили изображение перед перемещением/переворачиванием страницы или вашей страницей будет получен нуль, вам нужно загрузить вручную, вызвав метод updatePage() в классе CurlView.

для getCurrentIndex() вы можете проверить его в методе startCurl() и updatePage() в классе CurlView.

+0

Спасибо за Ваш ответ. Можете ли вы сделать это более ясным, добавив пример кода или направление в том, что я делаю шаг за шагом, я имею в виду 1-й, 2-й, 3-й ... – Prateek

+0

Просто за вашу помощь и время я хотел бы наградить вас своей щедростью. Ну, я получил ответ сам. Все еще большое спасибо. – Prateek

+1

Оке, спасибо и удачи. – dreamfighter

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