블로그 이미지
흰색앵초

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

'테두리'에 해당되는 글 2

  1. 2014.10.17 Bitmap 테두리 라운드처리하기
  2. 2014.10.05 ImgaeView 테두리 라운드처리
2014. 10. 17. 11:50 프로그래밍/Android

이번 포스팅에서는 이미지를 Bitmap으로 만든 후 테두리를 라운드처리하는 방법을 알아보겠습니다.
소스를 보시면....


import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.BitmapFactory;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

	LinearLayout linearLayout1;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		linearLayout1 = (LinearLayout) findViewById(R.id.LinearLayout1);
		
		ImageView iv1 = new ImageView(getApplicationContext());
		
		Bitmap bm1 = BitmapFactory.decodeResource(getResources(), R.drawable.img1);
		Bitmap bm2 = getRoundedCornerBitmap(bm1);

		iv1.setImageBitmap(bm2);
		linearLayout1.addView(iv1);
		
	}
	
	public static Bitmap getRoundedCornerBitmap(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());
	    final RectF rectF = new RectF(rect);
	    final float roundPx = 50; // 테두리 곡률 설정
	 
	    paint.setAntiAlias(true);
	    canvas.drawARGB(0, 0, 0, 0);
	    paint.setColor(color);
	    canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
	 
	    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
	    canvas.drawBitmap(bitmap, rect, rect, paint);
	 
	    return output;
	  }
	
	
}

소스는 BitmapFactory를 이용해서 이미지를 Bitmap화 한다음 아래의 getRoundedCornerBitmap을 이용해서 테두리를 라운딩 처리해주는 방식으로 처리되어있습니다. 라운드 처리한 Bitmap을 다시 ImageView에 적용해서 레이아웃에 추가해 보여주는 식의 간단한 예제입니다. 혹시나 필요하신 분이 있으면 도움이 되셨기를 바랍니다. 슝~

참조 : Rounded corner bitmaps on Android

비슷한 포스팅 : ImgaeView 테두리 라운드처리

posted by 흰색앵초
2014. 10. 5. 16:50 프로그래밍/Android

ImageView(이미지뷰)의 테두리에 라운드를 주고 싶을땐 아래와 같이 처리하면됩니다.

먼저 ImageView를 상속받아 아래와 같이 재정의 하는 Java 클래스를 만들어줍니다.

※ RadiusImageView.java 


import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Path;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.widget.ImageView;

public class RadiusImageView extends ImageView {

// 라운드처리 강도 값을 크게하면 라운드 범위가 커짐
    public static float radius = 18.0f;  

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

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

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

    @Override
    protected void onDraw(Canvas canvas) {
        Path clipPath = new Path();
        RectF rect = new RectF(0, 0, this.getWidth(), this.getHeight());
        clipPath.addRoundRect(rect, radius, radius, Path.Direction.CW);
        canvas.clipPath(clipPath);
        super.onDraw(canvas);
    }
}


※ 레이아웃 xml 파일 (ex:activity_main.xml)

    <com.example.image_crop2.RadiusImageView

        android:id="@+id/iv1"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_alignParentTop="true"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="48dp"

        android:src="@drawable/img5" />


위의 xml값을 보시면 패키지명.RadiusImageView로 선언해서 ImageView와 같은 방식으로 쓰시면됩니다.


※ 프로그래밍에서 참조해서 컨트롤을 하시려면...


public class MainActivity extends Activity {

	RadiusImageView iv1;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        iv1 = (RadiusImageView) findViewById(R.id.iv1);
        
    }
}

위와 같이 RadiusImageView로 참조해서 사용하시면 됩니다.

출처 : http://stackoverflow.com/questions/18229358/bitmap-in-imageview-with-rounded-corners

비슷한 포스팅 : Bitmap 테두리 라운드처리하기

posted by 흰색앵초
prev 1 next