Android canvas drawBitmap 방법 상세 설명 및 인 스 턴 스

Android canvas drawBitmap 방법 상세 설명 및 인 스 턴 스
이전에 사용자 정의 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);
다음 그림:
这里写图片描述
자,여기까지 입 니 다.자기가 쓴 것 이 더 깊 어 졌 으 니까 요!
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기