Android canvas drawBitmap 방법 상세 설명 및 인 스 턴 스
4115 단어 AndroidcanvasdrawBitmap
이전에 사용자 정의 view 에서 canvas.drawBitmap(Bitmap,SrcRect,DesRect,Paint)를 사 용 했 을 때 그 중의 두 번 째 와 세 번 째 매개 변수의 의 미 를 모호 하 게 알 수 없 었 습 니 다.소스 코드 함수 도 이해 하지 못 하고 다른 블 로 그 를 보고 자신의 이 해 를 더 해 다음 과 같이 정리 했다.우선,우 리 는 그림 을 한 장 보고 오늘 이 그림 을 그 릴 것 이다.
그리고 그림 을 빨간색 라인 으로 네 부분 으로 나 누 면 다음 과 같다.
뷰 를 사용자 정의 합 니 다.코드 는 다음 과 같 습 니 다.
public class PoterDuffLoadingView extends View {
private Resources mResources;
private Paint mBitPaint;
private Bitmap mBitmap;
private int mTotalWidth, mTotalHeight;
private Bitmap girlBitmap;
private int girlBitWidth , girlBitHeight;
private Rect girlSrcRect , girlDesRect;
public PoterDuffLoadingView(Context context) {
super(context);
mResources = getResources();
initBitmap();
}
private void initBitmap() {
//
girlBitmap = ((BitmapDrawable)mResources.getDrawable(R.drawable.a1)).getBitmap();
girlBitWidth = girlBitmap.getWidth();
girlBitHeight = girlBitmap.getHeight();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(girlBitmap, girlSrcRect, girlDesRect, null);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
Log.d("xxxxxx", "onSizeChanged , w = "+w+" , h = "+h+" , mBitWidth = "+mBitWidth+" , mBitHeight = "+mBitHeight);
super.onSizeChanged(w, h, oldw, oldh);
mTotalWidth = w;
mTotalHeight = h;
girlSrcRect = new Rect(0, 0, girlBitWidth, girlBitHeight);
girlDesRect = new Rect(0, 0, girlBitWidth, girlBitHeight);
}
}
그 중:
girlSrcRect = new Rect(0, 0, girlBitWidth, girlBitHeight);
그 릴 그림 이 전체 그림 의 크기 임 을 나타 낸다.나 는 girlSrcRect 가 그림 의 크기 범 위 를 가리킨다 고 생각한다.girlDesRect:바로 그 려 진 그림 이 View 에 있 는 위치 입 니 다.표 는 왼쪽 과 위쪽 이 0 이 고 오른쪽(girlBitWidth-0)은 그림 의 너비 이 며 아래쪽(girlBitHeight-0)은 그림 의 높이 이다.
효과 도 는 다음 과 같다.
우리 가 그림 의 위 치 를 이동 하고 싶 을 때 코드 는 다음 과 같다.
girlDesRect = new Rect(20, 50, 20+girlBitWidth, 50+girlBitHeight);
그림 의 왼쪽 에 있 는 위 치 는 20 개의 픽 셀 이 고 그림 의 상단 은 View 에 있 는 위 치 는 50 개의 픽 셀 입 니 다.그림 오른쪽 view 에 있 는 위 치 는(20+girlBitWidth)즉 그림 의 왼쪽 거 리 는:[(20+girlBitWidth)-20]입 니 다.밑바닥 이 같은 이치.그림:
만약 우리 가 상술 한 그림 의 두 번 째 부분 만 그리고 싶다 면 어떻게 해 야 합 니까?우 리 는 다음 과 같은 수정 만 하면 된다.
girlSrcRect = new Rect(girlBitWidth/2, 0, girlBitWidth, girlBitHeight/2);
girlDesRect = new Rect(20, 50, 20+girlBitWidth, 50+girlBitHeight);
효과 그림:그림 의 두 번 째 부분 을 보 여 주 는 것 이 아 닐 까요?세 심하게 보면 이 그림 은 이전의 전체적인 그림 크기 와 같다 는 것 을 알 수 있 습 니 다.이 유 는 무엇 일 까?
girlSrcRect:우리 가 그림 을 그 릴 부분 을 표시 합 니 다.
girlDesRect:우리 가 그림 을 그 릴 위 치 를 표시 합 니 다.위의 girlDesRect 값 을 보면 그림 의 위 치 는 전체 그림 의 위치 입 니 다.
그럼 우 리 는 1/4 그림 의 크기 만 원 합 니 다.어떻게 합 니까?
girlSrcRect = new Rect(girlBitWidth/2, 0, girlBitWidth, girlBitHeight/2);
girlDesRect = new Rect(20, 50, 20+girlBitWidth/2, 50+girlBitHeight/2);
다음 그림:자,여기까지 입 니 다.자기가 쓴 것 이 더 깊 어 졌 으 니까 요!
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.