2016-04-07 14 views
0

// burada recyclerview bu yöntemBir ImageView yığının altında eklendiğinde RelativeLayout üst ImageView kaldırmak istiyorum ama bu bütün düzeni kaldırıyor

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
    @Override 
    public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
     super.onScrollStateChanged(recyclerView, newState); 
    } 

    @Override 
    public void onScrolled(final RecyclerView recyclerView, int dx, int dy) { 
     super.onScrolled(recyclerView, dx, dy); 
     final int positionView = ((LinearLayoutManager) recyclerView.getLayoutManager()).findLastVisibleItemPosition(); 
     if (dy > 0) { 
      if (positionView >= 3) { 
       final View view = recyclerView.getChildAt(3); 
       if (view != null && recyclerView.getChildAdapterPosition(view) == positionView) { 
        TranslateAnimation translateAnimation = new TranslateAnimation(0, 0, 200, 0); 
        translateAnimation.setAnimationListener(new Animation.AnimationListener() { 
         @Override 
         public void onAnimationStart(Animation animation) { 
          recyclerView.smoothScrollToPosition(positionView); 
         } 

         @Override 
         public void onAnimationEnd(Animation animation) { 
          view.clearAnimation(); 
         } 

         @Override 
         public void onAnimationRepeat(Animation animation) { 

         } 
        }); 
        translateAnimation.setDuration(350); 
        view.setAnimation(translateAnimation); 

       } 
       createStackImageView(); 
       for (int i = stackView.getChildCount()-1; i >=1; i--) { 
        ResizeAnimation resizeAnimation = new ResizeAnimation(stackView.getChildAt(i)); 
        resizeAnimation.setHeights(stackView.getChildAt(i).getHeight(), stackView.getChildAt(i - 1).getHeight()); 
        resizeAnimation.setWidths(stackView.getChildAt(i).getWidth(), stackView.getChildAt(i - 1).getWidth()); 
        resizeAnimation.setDuration(250); 
        stackView.getChildAt(i).startAnimation(resizeAnimation); 
        if(i==1){ 
          stackView.removeView(stackView.getChildAt(i)); 
          stackView.invalidate(); 
          stackView.requestLayout(); 
         } 
       } 
       stackView.invalidate(); 
      } 
     } else { 

     } 
    } 
}); 

// Ve olduğu onScrollEvent nerede i böylece bu ImageView RelativeLayout dipte en üst görüntü oluşturulur yığın dynamically.When sayısı vardır

private void createStackImageView() { 
    fourthStack = new ImageView(getActivity()); 
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams 
     (1, 1); 
    layoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL); 
    layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); 
    fourthStack.setLayoutParams(layoutParams); 
    fourthStack.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    Random rnd = new Random(); 
    int color = Color.argb(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
    fourthStack.setBackgroundColor(color); 
    fourthStack.requestLayout(); 
    stackView.addView(fourthStack, layoutParams); 
} 

Şimdi benim asıl sorun RecyclerView i altındaki görüntüsü oluşturmak kaydırıldığında ise relativelayout bir ImageView oluşturmak gerekir yok olmayacak şekilde yok olacak bellek sorunu.Ama benim için ne olduğunu oluşturduğum tüm yığını kaldırıyor. Bunun neden olduğunu anlayamıyorum.

cevap

0

ImageView'i üstten çıkardığınızda Alt öğelerle ilgili bir bağa sahip olabilir. Bu nedenle, görüntüyü en baştan kaldırdığınızda, kaldırılan görünüme ilişkin göreli bağlantıya sahip görünümler görünmez olur. En iyi görünümü kaldırmak için GONE yöntemini kullanıyorsanız Görünmez'i kullanın ve aynı olup olmadığını kontrol edin

+0

görünürlük gitti ve görünmez hem bu sorun ortaya çıkmayacak, ancak bellek –

+0

aynı sorunu yaşıyorsanız boş bırakacaktır. – Sreyas

+0

hayır aynı sorunu almıyorum ama bu kaybolan görüntüyü kaydırırken geri dönüştürücümün titremesine neden olan belleği boşaltmayacaksınız –