9

すべての写真のサムネイルアイテムを表示するリサイクルビューがあります。アイテムをクリックすると、このアイテムの画像ビューのトランジションをディテールアクティビティに使用します。問題は、画像ソースがインターネットから​​で取得されていることです。共有画像要素のトランジションが正しく表示されない

transition error

// on view holder item click 
    final Pair<View, String>[] pairs = TransitionHelper.createSafeTransitionParticipants(this, false, 
        new Pair<>(((ItemViewHolder) viewHolder).thumbnail, getString(R.string.TransitionName_Profile_Image)), 
        new Pair<>(((ItemViewHolder) viewHolder).tvName, getString(R.string.TransitionName_Profile_Name))); 

    ActivityOptionsCompat transitionActivityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(this, pairs); 
    startActivityForResult(intent, requestCode, transitionActivityOptions.toBundle()); 

ディテール活動

// try to post pone transition until UIL load finish 
ActivityCompat.postponeEnterTransition(this); 
getSupportFragmentManager().beginTransaction().replace(R.id.layoutContent, new DetailFragment()).commit(); 

フラグメントの詳細

ImageLoader.getInstance().displayImage(url, imageViewDetail, new ImageLoadingListener() { 
       @Override 
       public void onLoadingStarted(String imageUri, View view) { 

       } 

       @Override 
       public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 
        finishAnimation(); 
       } 

       @Override 
       public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 

        finishAnimation(); 
       } 

       @Override 
       public void onLoadingCancelled(String imageUri, View view) { 
        finishAnimation(); 
       } 
      }); 


private void finishAnimation(){ 
    ActivityCompat.startPostponedEnterTransition(getActivity()); 
    imageViewDetail.invalidate(); 
} 
:そしていつか (常にではない)画像のこのような適切なサイズをリロードしません

fragment_detail.xml

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 

    <ImageView 
     android:transitionName="@string/TransitionName.Profile.Image" 
     android:id="@+id/imageViewDetail" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:adjustViewBounds="true" 
     android:scaleType="centerCrop"/> 
</FrameLayout> 

私もビューがロード画像の前にレイアウトされたが、まだ動作していない待つ:

imageViewDetail.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
      @Override 
      public boolean onPreDraw() { 
       // code load image from UIL 
       return false; 
      } 
     }); 

は、この問題を回避する方法はありますか?

+0

<ScrollView android:id="@+id/vScroll" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="51dp" android:scrollbars="none" > <HorizontalScrollView android:id="@+id/hScroll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scrollbars="none" android:layout_gravity="center"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageView android:id="@+id/imgFullscreen" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="fitXY" /> </LinearLayout> </HorizontalScrollView> </ScrollView> 

を扱うことができますあなたはcenterCropは、多分それは、異なるスケールタイプを試す問題だ使用されています。 –

+0

@Himaniよく、私は写真が画面に合っていて比率を維持しなければならないので使用しなければなりません。しかし、あなたはscaletypeのエラーについて何か手掛かりがありますか? **多くのケースで**動作しますが、画像が準備できていないように見えることがあります – R4j

+0

次にscaletypeにFITXYを使用 –

答えて

0

このXMLは、diferent画像サイズにjavaの

fullImageView = (ImageView) findViewById(R.id.imgFullscreen); 
selectedPhoto = (FeedItem) i.getSerializableExtra(TAG_SEL_IMAGE); 
     zoom = 1; 

     if (selectedPhoto != null) { 
      fetchFullResolutionImage(); 
     } else { 
      Toast.makeText(getApplicationContext(), 
        getString(R.string.msg_unknown_error), Toast.LENGTH_SHORT) 
        .show(); 
     } 



private void fetchFullResolutionImage() { 
    try { 
     final URL url = new URL(selectedPhoto.getImge());  
     new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        Bitmap bmp = BitmapFactory.decodeStream(url 
          .openStream()); 
        if (bmp != null) 
         setImage(bmp); 
        else { 
         showToast("Error fetching image!"); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }).start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 
private void setImage(final Bitmap bmp) { 
     runOnUiThread(new Runnable() { 
      public void run() { 
       fullImageView.setImageBitmap(bmp); 
       adjustImageAspect(selectedPhoto.getWidth(), 
         selectedPhoto.getHeight()); 
      } 
     }); 
    } 
private void adjustImageAspect(int bWidth, int bHeight) { 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
     if (bWidth == 0 || bHeight == 0) 
      return; 
     int swidth; 

     if (android.os.Build.VERSION.SDK_INT >= 13) { 
      Display display = getWindowManager().getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 
      swidth = size.x; 
     } else { 
      Display display = getWindowManager().getDefaultDisplay(); 
      swidth = display.getWidth(); 
     } 

     int new_height = 0; 
     new_height = swidth * bHeight/bWidth; 
     params.width = swidth; 
     params.height = new_height; 
     saveW = swidth; 
     saveH = new_height; 
     fullImageView.setLayoutParams(params); 
    } 
+0

私の問題は画像の拡大縮小ではなく移行の問題です。あなたのコードは画面の高さに合わせて画像を拡大縮小するだけです。 – R4j

関連する問題