2014-06-05 1 views
0

this answer을 기반으로 한 둥근 이미지 뷰를 만들었습니다. 완벽하게 이미지를 만듭니다. 그러나 두 가지 문제점이 있습니다.왜 imageView 라운드의 배경이 어둡습니까?

  • 이 이미지는 내가 왜 아무 생각이 없다 90도 회전
  • 이미지가 나는 아무 생각에서 온다 가지고 어두운 배경을 가지고 (사용자가 버튼을 클릭, 사용자의 갤러리가 표시되면 사용자는 자신의 프로필 그림으로 이미지를 선택) 어디에.

내가 사용 클래스 :

public class RoundImageView extends ImageView { 

    private Path path; 
    private Paint paint; 
    private PorterDuffXfermode porterDuffXfermode; 

    public RoundImageView(Context context) { 
     super(context); 
     init(); 
    } 

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

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

    private void init() { 
     setWillNotDraw(false); 

     path = new Path(); 
     paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
     porterDuffXfermode = new PorterDuffXfermode(PorterDuff.Mode.DST_IN); 
    } 

    @Override 
    public void onDraw(Canvas canvas) { 
     super.onDraw(canvas); 

     canvas.drawColor(Color.TRANSPARENT); 

     // Create a circular path. 
     final float halfWidth = canvas.getWidth()/2; 
     final float halfHeight = canvas.getHeight()/2; 
     final float radius = Math.max(halfWidth, halfHeight); 

     path.addCircle(halfWidth, halfHeight, radius, Path.Direction.CCW); 

     paint.setXfermode(porterDuffXfermode); 
     canvas.drawPath(path, paint); 
    } 
} 

방법 내가 레이아웃을 추가 해요 :

<com.allstarxi.widget.RoundImageView 
        android:layout_width="35dp" 
        android:layout_height="35dp" 
        android:src="@drawable/ic_launcher" 
        android:id="@+id/imageView" 
        android:contentDescription="@string/general_content_description" 
        android:scaleType="center" /> 

이것은을 스크린 샷 :

enter image description here

+1

Hesam을 초래합니다하지 않을 경우, AsynTask을 사용하여로드해야하는 경우, 당신의 코드를 얻을 \t \t \t mTopCard.setLayerType (널 LAYER_TYPE_HARDWARE)를 넣어; init() 메서드 안에 있고 나를 위해 작동합니다. 또한 매니페스트에 하드웨어 가속 플래그 "true"가 있습니다. – Marabita

답변

0

, 이후, 나는 RoundedImageView library을 사용했다. imageView의 너비와 높이를 고정 할 때 좋습니다. android:scaleType="center"

여기에서 또 다른 scaleTypes을 시도하고 그 결과를 참조하십시오 :

<com.makeramen.RoundedImageView 
        xmlns:app="http://schemas.android.com/apk/res-auto" 
        android:layout_width="36dp" 
        android:layout_height="36dp" 
        android:src="@drawable/ic_launcher" 
        android:id="@+id/ivUserPic" 
        android:contentDescription="@string/general_content_description" 
        android:scaleType="centerCrop" 
        app:mutate_background="true" 
        app:border_width="0dp" 
        app:corner_radius="18dp" 
        app:oval="true"/> 
0

이것을 RoundImageView 클래스에 넣으십시오. S :

public Bitmap getCroppedBitmap(Bitmap bitmap) { 
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
      bitmap.getHeight(), Config.ARGB_8888); 
    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()); 

    paint.setAntiAlias(true); 
    canvas.drawARGB(0, 0, 0, 0); 
    paint.setColor(color); 
    // canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 
    canvas.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, 
      bitmap.getWidth()/2, paint); 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
    canvas.drawBitmap(bitmap, rect, rect, paint); 
    //Bitmap _bmp = Bitmap.createScaledBitmap(output, 60, 60, false); 
    //return _bmp; 
    return output; 
} 

는 다음의 onDraw에 넣고 :이 문제를 해결하는 방법을 찾을 수 없습니다

getCroppedBitmap(BitmapFactory.decodeResource(getResources(), getDrawable())); 
+0

감사합니다. BitmapFactory.decodeResource()는 getResources를 첫 번째 매개 변수로 찾고 drawable 인 두 번째 매개 변수로 'int'를 찾습니다. getDrawable() 대신에 다른 것을 전달해야합니까? – Hesam

+0

이미지가 항상 같으면 R.drawable.image_id를 시도하십시오. 그렇지 않으면 이미지를 다른 방법으로 비트 맵으로 만들어 getCroppedImage로 전달하십시오. – micnubinub

+0

이 방법으로 http://stackoverflow.com/a/8306683/513413 (이미지 비트 맵 가져 오기)를 사용했습니다. 이미지가 표시되지만 Circle이 아닌 사각형 모양입니다. 나는 문제가 무엇인지 찾으려고 노력하고있다. 귀하의 코드는 괜찮아 보인다! – Hesam

-1

그것은 이것에 대해 전부입니다 : 이 내 샘플입니다

센터, CENTER_CROP, CENTER_INSIDE, FIT_CENTER, FIT_END, FIT_START, FIT_XY, MATRIX

0

UI 스레드에서 데이터베이스에서 무언가를로드했기 때문에 이전과 같은 경험이 있습니다. UI 스레드에서 데이터베이스/디스크에서 무언가를로드합니까? 예 당신이 당신의 UI 렌더링 과정

관련 문제