android에서 원형 그림을 그리는 몇 가지 방법

2980 단어
개발 과정에서 이미지를 표시하고 특수한 수요를 표시하며 그림을 원각이나 원형 또는 다른 모양으로 표시하는 수요가 자주 있다.그러나 흔히 우리 손에 있는 그림이나 서버에서 얻은 그림은 사각형이다.이럴 때는 우리가 직접 처리하고 그림을 필요한 모양으로 처리해야 한다.희향두의'희'작법이 한 가지보다 크듯이 제 연구를 통해 특수한 그림을 그리는 방법도 한 가지가 아닙니다. 저는 세 가지를 발견했고 하나하나 들어보겠습니다.
Xfermode 두 그림의 교차 방식 사용하기
자료를 찾아서android에서 붓을 그릴 수 있는 Xfermode 즉 교차 모드를 설정하여 두 장의 그림이 교차한 후의 디스플레이 방식을 설정합니다. 구체적인 모드는 아래 그림을 보십시오. 원본 코드는androidapidemo를 제거할 수 있습니다.(SRC는 타겟 맵, DST는 타겟 맵)
위의 그림에서 보듯이 만약에 우리가 원형을 그려야 한다면 캔버스 위에 목표 크기와 같은 원을 먼저 그린 다음에 xfermode가 SRC 를 선택할 수 있다IN, 저희 프로필 사진이나 다른 그림을 말씀드리면 됩니다.마찬가지로 우리의 그림을 먼저 그리고 원을 그릴 수도 있지만 xfermode는DST 를 선택해야 한다IN.두 가지 모두 우리가 필요로 하는 효과를 실현할 수 있다.예제 코드는 다음과 같습니다.
Paint p = new Paint();
p.setAntiAlias(true); //   
p.setColor(Color.BLACK);
p.setStyle(Paint.Style.STROKE);
Canvas canvas = new Canvas(bitmap);  //bitmap        ,    
p.setXfermode(new PorterDuffXfermode(Mode.DST_IN));  //          DST_IN
int radius = bitmap.getWidth; //         
canvas.drawCircle(radius, radius, radius, p); //r=radius,   (r,r)

이상은 간단한 예시입니다. 상기 16가지 모델에 따라 당신은 사실 더 많은 효과를 낼 수 있습니다.또한, 네가 교차도를 한 장 주면, 그 그림의 형상이 어떠한지, 우리의 그림은 어떤 모양으로 나타날 수 있다.
캔버스 영역을 잘라내어 지정된 모양의 도면을 작성합니다.
안드로이드에서Canvas는ClipPath,ClipRect,ClipRegion 등의 방법으로 재단을 제공하는데,Path,Rect,Region의 서로 다른 조합을 통해 안드로이드는 거의 임의의 모양의 재단 구역을 지원할 수 있다.따라서 우리는 거의 임의의 형태의 구역을 얻을 수 있고 이 구역에 그림을 그리면 우리가 원하는 그림을 얻을 수 있다. 바로 예시를 볼 수 있다.
int radius = src.getWidth() / 2; //src         ,        bitmap  。
Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(dest);
Paint paint = new Paint();
paint.setColor(Color.BLACK);
paint.setAntiAlias(true);
Path path = new Path();
path.addCircle(radius, radius, radius, Path.Direction.CW);
c.clipPath(path);   //    
c.drawBitmap(src, 0, 0, paint);  //     

BitmapShader 사용
직접 예시를 먼저 보다
int radius = src.getWidth() / 2;
BitmapShader bitmapShader = new BitmapShader(src, Shader.TileMode.REPEAT,
                Shader.TileMode.REPEAT);
Bitmap dest = Bitmap.createBitmap(src.getWidth(), src.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(dest);
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(bitmapShader);
c.drawCircle(radius,radius, radius, paint);

Shader는 바로 붓을 그리는 렌더링기입니다. 본질적으로 이 방법은 사실 원을 그리는 것이지만 렌더링은 우리의 그림을 사용해서 지정한 모양을 얻을 수 있습니다.그러나 복잡한 도형을 그리기에는 적합하지 않지만 메모리 소모는 첫 번째 도형보다 훨씬 적을 것 같다.동시에 Shader를 설정합니다.TileMode.MIRROR는 거울 효과도 실현할 수 있고 매우 좋다.
위에서 말한 것은 바로 실현된 세 가지 방법이다. 세 가지 방법은 모두 많은 모양을 그릴 수 있다. 물론 매우 매우 매우 복잡한 상황을 만나면 나는 첫 번째 방법을 사용하는 것을 권장한다. 이때 미용사들이 마지막 모양의 그림을 한 장 주고 코드를 그리는 것을 절약할 수 있다.여러분은 자신의 요구에 따라 선택하세요.
github에 있는 Custom Shape ImageView는 우리가 말한 첫 번째 방법으로 그린 것이다.RoundedImageView와CircleImageView는bitmapshader를 사용하여 완성합니다. 물론 다른 컨트롤도 있을 수 있고 다른 실현 방법도 있을 수 있습니다. 알고 있으면 저에게 답장해 주십시오.
원본 주소:http://blog.isming.me/2014/09/19/draw-circle-image-in-android/, 전재는 출처를 밝혀 주십시오.

좋은 웹페이지 즐겨찾기