2

私はカスタム下記のレイアウト(ビッグ)の通知を作成:ScaleType cropCenter - アンドロイド4.xの

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scaleType="centerCrop"/> 

</LinearLayout> 

と、このような通知を作成:

private void showNotificationWithImage(Bitmap image) { 

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.notification); 
    remoteViews.setImageViewBitmap(R.id.image, image); 

    Notification notification = new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.n_icon) 
      .setCustomBigContentView(remoteViews) 
      .setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0)) 
      .build(); 

    notificationManager.notify(0, notification); 
} 

を表示される画像はthis oneです。アンドロイド4.1.2で

Image scaled correctly

(SDKのLVL:アンドロイド5.0上方、画像がImageView内(centerCropは、y軸は正確にフィット)が正しくスケーリングさで

しかし、の画像は正確に縮尺されていません。

Image NOT scaled correctly

両方の例での解像度は同じです。

  • 画像全体の幅をまたがる必要があるためなどfitCenterを使用するなど、この問題がカスタム通知(ビッグコンテンツ)内ImageViewに発生することに注意してください、ないActivities

  • はオプションではありません(ORの高さ)

  • ImageViewの高さをwrap_contentに設定しようとしましたが、同じ問題が発生しました。 ImageViewの高さを設定して画像のアスペクト比にぴったり合うように機能するようですが、アスペクト比の異なる画像を表示したい場合はオプションではありません。

誰もがこの問題を解決する方法を知っていますか?

PS:私のテストプロジェクトhereをチェックアウトすることができます。

EDIT:wrap_contentに画像の高さを設定し、rom4ek結果によって提案されるとすぐに通知がそれに当たるとして、次のようにadjustViewBounds="true"を追加することが最大heigthです:Link to Image

+0

画像のアスペクト比を維持する場合は、ScaleType centerInsideを使用する必要があります。またはFIT_XYの画像に収まるようにします。 –

+0

@Chetan centerCropはアスペクト比(https://developer.android.com/reference/android/widget/ImageView.ScaleType.html)を維持し、1つの軸が正確に一致するようにイメージに適合する必要があります。 – FWeigl

+0

はい、それはすべてのサイドイメージを切り抜き、中央からイメージを表示します。 –

答えて

0

ちょうどwrap_contentにごImageViewの高さを設定し、同様にそれにandroid:adjustViewBounds="true"行を追加し、それが動作します:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/image" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:scaleType="centerCrop"/> 

</LinearLayout> 

それは、Android 4.1でどのように見えますか。1、API 16:

AndroidのAPIドキュメントから

enter image description here

+0

これは@Ascorbinの最初の要件ですか?彼が達成しようとしたことは、ロリポップのような全く同じ行動だと思います。 – azizbekian

+0

まず、この動作はOSのバージョンにのみ依存するのではなく、画面のサイズにも依存します。次に、ロリポップとまったく同じ動作です。 – rom4ek

+0

@ rom4ek残念ながら、これは、通知ビューが画像を保持するのに十分な大きさである場合にのみ機能します。通知が最大高さに達すると、イメージは正しく表示されません。 ImageViewの上にTextViewを追加して、これを紹介します:http://de.tinypic.com/r/orlesy/9 – FWeigl

0

setCustomBigContentView

NotificationCompat.Builder setCustomBigContentView(RemoteViews contentView) サプライカスタムRemoteViewsが展開中のプラットフォームテンプレートの代わりに使用します形。これは、このBuilderオブジェクトによって構築されるはずの拡張レイアウトを上書きします。 JELLY_BEANより前のバージョンでは操作しません。

リンクの下にそれをチェックアウトしてください:

https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setCustomBigContentView(android.widget.RemoteViews)

更新日:

それは解決策ではありません。しかし、それを達成するための簡単な提案です。

private void showNotificationWithImage(Bitmap image) { 
    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), `R.layout.notification);` 
remoteViews.setImageViewBitmap(R.id.image, image); 

Notification notification; 
RemoteViews bigView = new RemoteViews(context.getPackageName(), 
     R.layout.notification); 

bigView.setImageViewResource(R.id.image, R.mipmap.ic_launcher); 

NotificationCompat.Builder mNotifyBuilder = new NotificationCompat.Builder(context); 
notification = mNotifyBuilder.setContentTitle("Title") 
     .setContentText("Slide down to expand") 
     .setSmallIcon(R.drawable.n_icon) 
     .setLargeIcon(image) 
     .setCustomBigContentView(remoteViews) 
     .build(); 
// now show notification.. 
NotificationManager mNotifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
mNotifyManager.notify(1, notification); 
} 

この方法をご確認ください。通知をスワイプすると画像が完全に表示されます。これはAndroid_4.2.2でテストされています。

+0

Jelly BeanはAndroid 4.1.xです(https://source.android.com/source/build- numbers.html)、私のスクリーンショットが撮られました。これは問題ではありません。明確にするために編集された質問。 – FWeigl

+0

スケーリングの問題は、このコードで私にとってはまったく同じです。 – FWeigl

関連する問題