Paint API - Xfermode 및 PorterDuff에 대한 자세한 설명(5)
이 섹션 소개:
좋아, 이전 섹션에서 우리는 Xfermode 이미지 혼합의 또 다른 예를 작성했습니다. 아름다운 여성의 옷을 닦는 데모와 이전 섹션입니다. 둥근 모서리나 원형 ImageView를 구현하려면 Xfermode를 사용하세요. 모든 사람이 더 이상 이전처럼 Xfermode에 익숙하지 않다고 생각합니다. 다소 익숙하게 들립니다. 이 섹션에서는 Xfermode의 ProterDuff.SRC_IN 모드를 사용하여 텍스트 로딩 효과를 달성하는 Xfermode의 마지막 예제를 작성하겠습니다! ProterDuff의 패턴 다이어그램을 게시해야 합니다.
이 섹션의 예는 Android Paint의 setXfermode PorterDuffXfermode 설명자, 더 이상 고민하지 않고 이 섹션을 시작하겠습니다~
1. 달성 및 구현 프로세스 분석:
달성할 렌더링:
구현 프로세스 분석:
1단계 먼저 텍스트 사진(투명 배경)
2단계. 초기화 브러시, 배경 이미지(DST), 직사각형 Rect(SRC)
3단계 먼저 레이어를 저장한 다음 배경 이미지를 먼저 그리고 셔플 모드를 설정한 다음 Rect를 그리고 셔플 모드를 해제합니다. 그런 다음 저장된 레이어를 복원하고, 마지막으로 Rect 영역의 높이를 수정하고, 무효화()를 호출하여 뷰가 다시 그려지도록 합니다!
프로세스 분석이 이해가 안가시면 코드만 보시면 완전 간단해요~
2. 코드 구현:
첫 번째는 스크린 툴 클래스인 ScreenUtil.java 입니다. 여기에 게시되어 있습니다. 패스! 그런 다음 사용자 정의 View 클래스가 있습니다. LoadTextView.java:
/** * Created by Jay on 2015/10/26 0026. */ public class LoadTextView extends View { private PorterDuffXfermode mXfermode = new PorterDuffXfermode(PorterDuff.Mode.SRC_IN); private Bitmap backBitmap; private Paint mPaint; private int mBitW, mBitH; private int mCurW, mCurH, mCurTop; private Rect mDynamicRect; public LoadTextView(Context context) { this(context, null); } public LoadTextView(Context context, AttributeSet attrs) { super(context, attrs); mCurW = ScreenUtil.getScreenW(context); mCurH = ScreenUtil.getScreenH(context); init(); } public LoadTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } private void init() { //画笔初始化: mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); mPaint.setFilterBitmap(true); mPaint.setDither(true); mPaint.setColor(Color.RED); //背部图片的初始化 backBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.img_string); mBitH = backBitmap.getHeight(); mBitW = backBitmap.getWidth(); //设置当前的高度 mCurTop = mBitH; mDynamicRect = new Rect(0, mBitH, mBitW, mBitH); //初始化原图 } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int saveLayerCount = canvas.saveLayer(0, 0, mCurW, mCurH, mPaint, Canvas.ALL_SAVE_FLAG); canvas.drawBitmap(backBitmap, 0, 0, mPaint);// 绘制目标图 mPaint.setXfermode(mXfermode); //设置混排模式 canvas.drawRect(mDynamicRect, mPaint); //绘制源图 mPaint.setXfermode(null); //清除混排模式 canvas.restoreToCount(saveLayerCount); //恢复保存的图层 // 改变Rect区域,假如 mCurTop -= 2; if (mCurTop <= 0) { mCurTop = mBitH; } mDynamicRect.top = mCurTop; invalidate(); //重绘 } }
더 이상은 필요하지 않습니다. 위의 코드만으로도 그림에 표시된 효과를 얻을 수 있습니다. 매우 간단합니다~
코더가 필요합니다. 돼지 글꼴 사진을 게시하세요~
3. 이 섹션의 코드 샘플을 다운로드하세요.
SRC_IN
모드는 텍스트 로딩 효과를 작성하고 이전 모드는 DST_IN 모드를 구현합니다. 그리고 둥근 ImageView와
DST_OUT모드를 통해 미인옷 지우기를 실현할 수 있다고 믿습니다. 물론 Xfermode를 사용하는 방법에 대해서는 누구나 이미 아이디어를 갖고 있습니다. 물론 이러한 예는 그다지 의미가 없으며 실제 개발은 전혀 불가능합니다. 사용되지만 누구나 이해하기 쉽습니다 ~ 쿵푸를 연습하는 것과 같고 스승이 인도하고 스스로 의지하여 연습합니다! 기본 튜토리얼은 단지 가이드일 뿐입니다. 그게 전부입니다. 배운 내용을 진정으로 익히고 적용하려면 여전히 자신에게 의지하고, 다른 사람의 훌륭한 코드를 더 많이 읽고, 더 많은 일을 해야 합니다! 알았어 그게 다야 고마워~