2016-08-31 5 views
0

私はhttps://github.com/hdodenhof/CircleImageViewライブラリを使用していますが、いくつかのライブラリも試してみました。このmPicasso.load(url).into(mCircularImageView)のように、ピカソでサーバからイメージをロードする必要があります。しかし、私はいつもこれを取得:enter image description hereCircleImageViewの高さをピケットのビットマップで塗りつぶす

しかし、私はこれを達成する必要があります:

resize(100,100)fit()transform(new CircleTransorm())を呼び出そうとしました

enter image description here

、助けた上記の

public class CircleTransform implements Transformation { 
    @Override 
    public Bitmap transform(Bitmap source) { 
     int size = Math.min(source.getWidth(), source.getHeight()); 

     int x = (source.getWidth() - size)/2; 
     int y = (source.getHeight() - size)/2; 

     Bitmap squaredBitmap = Bitmap.createBitmap(source, x, y, size, size); 
     if (squaredBitmap != source) { 
      source.recycle(); 
     } 

     Bitmap bitmap = Bitmap.createBitmap(size, size, source.getConfig()); 

     Canvas canvas = new Canvas(bitmap); 
     Paint paint = new Paint(); 
     BitmapShader shader = new BitmapShader(squaredBitmap, 
      BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP); 
     paint.setShader(shader); 
     paint.setAntiAlias(true); 

     float r = size/2f; 
     canvas.drawCircle(r, r, r, paint); 

     squaredBitmap.recycle(); 
     return bitmap; 
    } 

    @Override 
    public String key() { 
     return "circle"; 
    } 
} 

何もありません。

マイレイアウト:

<de.hdodenhof.circleimageview.CircleImageView 
     android:id="@+id/account_profile_picture" 
     style="@style/ProfilePicture" 
     android:layout_gravity="center_horizontal"/> 

スタイル:

<style name="ProfilePicture"> 
    <item name="android:layout_width">@dimen/profile_picture_size</item> 
    <item name="android:layout_height">@dimen/profile_picture_size</item> 
    <item name="android:src">@drawable/profile_picture_placeholder</item> 
    <item name="civ_border_width">1dp</item> 
    <item name="civ_border_color">#FF000000</item> 
</style> 

答えて

0

ホワイトfit()は、ビューがロードされ、測定されるまで、それはあなたが望む結果を達成していないコールを延期します。これはそれを行う必要がありますちょうどあなたのcircleimageview

android:scaleType="centerCrop" 

にこの属性を設定

mPicasso.load(url).fit().centerCrop().into(mCircularImageView) 
+0

これは残念なことに動作しませんでした。 – satorikomeiji

+0

次に、レイアウトが正しく設定されていることを確認します。オリジナルの質問をレイアウトXMLで更新できますか? – anthonymonori

0

:あなたが期待される出力を達成するためにcenterCrop()を追加する必要があります。

は、動的ImageViewのを作成することができ、これを使用してくださいあなたに

0

をありがとう、私は、これはあなたを助けることを願っています。

public class RoundedImageView extends ImageView { 

    public RoundedImageView(Context context) { 
     super(context); 
    } 

    public RoundedImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public RoundedImageView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     Drawable drawable = getDrawable(); 

     if (drawable == null) { 
      return; 
     } 

     if (getWidth() == 0 || getHeight() == 0) { 
      return; 
     } 
     Bitmap b = ((BitmapDrawable) drawable).getBitmap(); 
     Bitmap bitmap = b.copy(Bitmap.Config.ARGB_8888, true); 

     int w = getWidth(), h = getHeight(); 

     Bitmap roundBitmap = getCroppedBitmap(bitmap, w); 
     canvas.drawBitmap(roundBitmap, 0, 0, null); 

    } 

    public static Bitmap getCroppedBitmap(Bitmap bmp, int radius) { 
     Bitmap sbmp; 

     if (bmp.getWidth() != radius || bmp.getHeight() != radius) { 
      float smallest = Math.min(bmp.getWidth(), bmp.getHeight()); 
      float factor = smallest/radius; 
      sbmp = Bitmap.createScaledBitmap(bmp, (int)(bmp.getWidth()/factor), (int)(bmp.getHeight()/factor), false); 
     } else { 
      sbmp = bmp; 
     } 

     Bitmap output = Bitmap.createBitmap(radius, radius, Bitmap.Config.ARGB_8888); 
     Canvas canvas = new Canvas(output); 

     final int color = 0xffa19774; 
     final Paint paint = new Paint(); 
     final Rect rect = new Rect(0, 0, radius, radius); 

     paint.setAntiAlias(true); 
     paint.setFilterBitmap(true); 
     paint.setDither(true); 
     canvas.drawARGB(0, 0, 0, 0); 
     paint.setColor(Color.parseColor("#BAB399")); 
     canvas.drawCircle(radius/2 + 0.7f, 
       radius/2 + 0.7f, radius/2 + 0.1f, paint); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
     canvas.drawBitmap(sbmp, rect, rect, paint); 

     return output; 
    } 

} 
0

円形画像ビュー用のライブラリを追加する必要はありません。 AndroidのAPIはすでに、この目的のために使用する

RoundedBitmapDrawable

を提供します。私はあなたがやりたいGlideライブラリを使用している - 私はあなたのコードで見ています何

Glide.with(context) 
        .load(imageUrl) 
        .asBitmap() 
        .placeholder(R.color.gray) 
        .diskCacheStrategy(DiskCacheStrategy.ALL) 
        .centerCrop() 
        .into(new BitmapImageViewTarget(imageView){ 
         @Override 
         public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
          RoundedBitmapDrawable circularBitmapDrawable = 
            RoundedBitmapDrawableFactory.create(context.getResources(), resource); 
          circularBitmapDrawable.setCircular(true); 
          imageView.setImageDrawable(circularBitmapDrawable); 
         } 

         @Override 
         public void onLoadFailed(Exception e, Drawable errorDrawable) { 
          imageView.setImageResource(R.drawable.profile); 
         } 
        }); 
0

は、あなたがサークル変換とサークルイメージビューの両方を使用しています。私はあなたが円の画像ビューを単純な画像ビューに変更することを提案しています。

mPicasso.load(url).resize(300,300).centerCrop().transform (new CircleTransform()).into(mImageView); 

希望します。

関連する問題