안 드 로 이 드 이미지 처리 원형,삼각형 및 부채 형 두상 그리 기

머리말
안 드 로 이 드 의 일상적인 개발 에 서 는 원형 을 그 리 는 것 과 그림 을 그 리 는 것 이 쉬 운 일이 라 고 믿 지만 원형 그림 을 그 리 는 것 은 좀 어렵다.예전 에 게 으 름 을 피 우기 위해 github 에 가서 오픈 소스 프로젝트 를 찾 았 는데 나중에 야 원형 그림 을 그 리 는 것 도 간단 하 다 는 것 을 알 게 되 었 다.
원형 그림 을 그 리 는 데 도 두 단계 가 필요 합 니 다.
원형 을 그 리 는 것 과 그림 을 그 리 는 것 은 단지 그것들 을 한데 모 으 는 것 일 뿐,얻 은 결 과 는 원형 그림 이다.
직접 코드 올 리 기:

public class CircleImageView extends View {

 private Paint mPaint;
 private Paint mTargetPaint;
 private Bitmap mSourceBitmap;
 private Bitmap mTargetBitmap;
 private Canvas mTargetCanvas;

 private int mWidth;
 private int mHeight;

 public CircleImageView(Context context) {
  this(context, null);
 }

 public CircleImageView(Context context, AttributeSet attrs) {
  this(context, attrs, 0);
 }

 public CircleImageView(Context context, AttributeSet attrs, int defStyleAttr) {
  super(context, attrs, defStyleAttr);
  init();
 }

 private void init() {
  mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  mTargetPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
  mTargetPaint.setXfermode(new PorterDuffXfermode(SRC_IN));

  mSourceBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.xiaojiangshi);
  mTargetBitmap = Bitmap.createBitmap(mSourceBitmap.getWidth(), mSourceBitmap.getHeight(), Bitmap.Config.ARGB_8888);
  mTargetCanvas = new Canvas(mTargetBitmap);
 }

 @Override
 protected void onSizeChanged(int w, int h, int oldw, int oldh) {
  super.onSizeChanged(w, h, oldw, oldh);
  mWidth = w;
  mHeight = h;
 }

 @Override
 protected void onDraw(Canvas canvas) {
  //     Bitmap  .
  int radius = Math.min(mWidth, mHeight) / 2;
  //      
  mTargetCanvas.drawCircle(mWidth / 2, mHeight / 2, radius, mPaint);
  //    Bitmap
  mTargetCanvas.drawBitmap(mSourceBitmap, 0, 0, mTargetPaint);

  canvas.drawBitmap(mTargetBitmap, 0, 0, null);
 }
}
효 과 는 다음 과 같 습 니 다:

코드 에서 가장 중요 한 것 은 바로 이 문장 이다.

mTargetPaint.setXfermode(new PorterDuffXfermode(SRC_IN));
SRC_IN 모드 는 두 개의 효 과 를 교차 시 킨 후에 보 여줄 수 있 습 니 다.주의해 야 할 것 은 dst 가 먼저 그리고 src 를 그 려 야 한 다 는 것 입 니 다.위의 예 를 들 어 원형 을 먼저 그리고 Bitmap 를 그 려 야 합 니 다.순서 가 뒤 바 뀌 면 원형 만 볼 수 있 습 니 다.
SRC 빼 고IN 이라는 모델 외 에 다른 15 가지 모델 도 있다.관심 있 으 면 직접 효 과 를 시험 해 보 세 요.공식 적 으로 제공 하 는 APIDemo 에서 해당 하 는 코드 를 찾 을 수 있 습 니 다.

이 원 리 를 알 게 된 후에 우 리 는 여러 가지 모양 의 그림 을 그 릴 수 있 습 니 다.원형 을 그 리 는 대신 다른 모양 을 그 리 는 절차 만 있 으 면 됩 니 다.
삼각형:

mPath.reset();
mPath.moveTo(mWidth / 2, 0);
mPath.lineTo(0, mHeight);
mPath.lineTo(mWidth, mHeight);
mPath.close();
mTargetCanvas.drawPath(mPath, mPaint);

부채 모양:

RectF rectF = new RectF(0, 0, mWidth, mHeight);
mTargetCanvas.drawArc(rectF, 210, 120, true, mPaint);

총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 안 드 로 이 드 개발 자 들 에 게 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기