使图像完全无边框圆形

问题描述:

我想为我的Profile活动绘制圆形图像。我已经尝试了这些答案,但在我的情况下不起作用。使图像完全无边框圆形

How to create a circular ImageView in Android?

How to make an ImageView with rounded corners?

How to make an image fit into a circular frame in android

How to Make an ImageView in Circular Shape?

这不是一个重复的问题,使用这些方法,这里是我得到: -

enter image description here

问题:图像不完全是圆形的。

这里是我的Profile.java代码: -

import android.content.Intent; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.PorterDuff; 
import android.graphics.PorterDuffXfermode; 
import android.graphics.Rect; 
import android.graphics.RectF; 
import android.os.Bundle; 
import android.support.v7.app.ActionBarActivity; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.widget.ImageView; 
import android.widget.TextView; 

/** 
* Created by kundan on 6/4/2015. 
*/ 
public class Profile extends ActionBarActivity { 


    TextView username; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.profile); 


     username= (TextView) findViewById(R.id.txt); 

     String recievedusername=getIntent().getExtras().getString("toname"); 
     username.setText(recievedusername); 


     Bitmap bm = BitmapFactory.decodeResource(getResources(), 
       R.mipmap.gomez); 
     Bitmap resized= Bitmap.createScaledBitmap(bm,200,200,true); 
     Bitmap conv_bm=getCircleBitmap(resized,100); 
     // set circle bitmap 
     ImageView mImage = (ImageView) findViewById(R.id.profile_image); 
     mImage.setImageBitmap(conv_bm); 
     // TODO Auto-generated method stub 
    } 
    private Bitmap getCircleBitmap(Bitmap bitmap , int pixels) { 
     final Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
       bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
     final Canvas canvas = new Canvas(output); 
     final int color = 0xff424242; 
     final Paint paint = new Paint(); 
     final Rect rect = new Rect(0, 0, bitmap.getWidth(),bitmap.getHeight()); 
     final RectF rectF = new RectF(rect); 
     paint.setAntiAlias(true); 
     canvas.drawARGB(0, 0, 0, 0); 
     paint.setColor(color); 
     canvas.drawCircle(100, 100, 100, paint); 
     paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
     canvas.drawBitmap(bitmap, rect, rect, paint); 
     bitmap.recycle(); 
     return output; 
    } 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu_apploud, menu); 
     return super.onCreateOptionsMenu(menu); 
    } 
    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 
     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_addnew) { 
      Intent i; 
      i=new Intent(Profile.this,ApplaudSomeone.class); 
      startActivity(i); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
} 

需要我profile.xml的部分是: -

<?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="wrap_content" 
    android:orientation="vertical" 
    > 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="#ff17a088" 
     android:weightSum="1" 
     android:paddingTop="5dp" 
     android:gravity="center"> 
     <ImageView 
      android:layout_width="150dp" 
      android:layout_height="150dp" 
      android:id="@+id/profile_image" 
      android:contentDescription="@string/img" 
      android:layout_gravity="center" 
      android:scaleType="centerCrop" 
      android:background="@drawable/img" 
      android:layout_alignParentTop="true" 
      android:layout_alignEnd="@+id/txt2" /> 
     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="suman" 
      android:id="@+id/txt" 
      android:textSize="25sp" 
      android:padding="5dp" 
      android:layout_gravity="center_horizontal" 
      android:textColor="#fffff9" 
      android:layout_below="@+id/profile_image" 
      android:layout_centerHorizontal="true" /> 

img.xml代码: - 提前

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android" 
      android:shape="oval" 
      android:useLevel="false" 
      > 

      <stroke android:width="5dp" 
       android:color="#ffffff"/> 
     </shape> 
    </item> 
</layer-list> 

谢谢!

+0

看起来是圆形的给我。现在我最好的猜测是你只想要女孩的脸出现,在这种情况下,你需要让你的圈变小...... –

+1

是的,我只想要女孩的脸。但我不想减小圆的半径 –

+0

我该如何增加面罩。 –

是的,终于我解决了这个问题。如果你们中的任何人都面临同样的问题,那么使用canvas.drawCircle(100, 100, 90, paint);而不是canvas.drawCircle(100, 100, 100, paint);,这一定会解决你的问题。