안 드 로 이 드 그림 그 리 는 몇 가지 방법

자바 의 graphics 류 를 사용 하여 도형 과 그림 을 그 리 는 것 에 익숙 합 니 다.안 드 로 이 드 를 작성 하 는 것 은 도형 과 그림 을 그 리 는 데 익숙 하지 않 습 니 다.
현재 사용 하고 있 는 안 드 로 이 드 에 그림 을 그 리 는 방법 을 요약 해 보 겠 습 니 다.
1.컨트롤 을 사용 하 는 setImageResource 방법
1.main.xml 파일 에 ImageView(TestView 도 가능 합 니 다.View 류 를 계승 하면 모두 가능 할 것 같 지만 하나씩 검증 하지 않 았 습 니 다)    또는 ImageButton 등 컨트롤 은 다음 과 같 습 니 다.
<LineLayout xmlns:android="http://schemas.android.com/apk/res/android"	 android:orientation="vertical"
		 android:layout_width="fill_parent"
		 android:layout_height="fill_parent">
	<ImageView
		android:id="@+id/board"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"></ImageView>
	<ImageButton
		android:id="@+id/piece"
		android:layout_width="20px"
		android:layout_height="20px"></ImageButton>
	</LineLayout>
 
2.그림 파일 piece.jpg 와 board.jpg 를 res.drawable 에 두 기 폴 더 아래(drawable-hdpi,drawable-mdpi,drawable-ldpi,각각 높 은 픽 셀,중간 픽 셀,낮은 픽 셀 의 그림 을 표시 합 니 다)drawable-hdpi 아래 에 두 십시오.
 
3.src 의 main.java 를 다음 과 같이 수정 합 니 다.
	public class main extends Activity {
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//   findViewById  ImageView
		board = (ImageView) findViewById(R.id.board);
		//  ImageView      
		board.setImageResource(R.drawable.board);
		//   findViewById  ImageButton
		piece = (ImageButton) findViewById(R.id.piece);
		//  ImageButton      
		piece.setImageResource(R.drawable.piece);
	}

	//     ImageView
	private ImageView board;
	private ImageButton piece;

}

  4.첨부 파일 의 imagtest 1.jpg 와 같이 안 드 로 이 드 애플 리 케 이 션 을 실행 합 니 다.
2.View 류 의 onDraw(Canvas canvas)방법 과 invalidate()를 사용 하여 바둑판 에 바둑 알 을 그 리 는 것 을 실현 합 니 다.
자바 에 있 는 Panel 의 paint 방법 처럼 Panel 이 처음 표시 되 었 을 때 Panel 을 그립 니 다.repaint 는 프로그래머 에 게 수 동 으로 paint 를 호출 하 는 방법 을 제공 합 니 다.
안 드 로 이 드 에서 View 류 의 onDraw 방법 도 View 가 처음 표 시 될 때 View 를 그립 니 다.invalidate()도 프로그래머 에 게 onDraw 를 수 동 으로 호출 하 는 방법 을 제공 합 니 다.
구체 적 인 실현 방법 은 다음 과 같다.
1.ImageView 에서 ImageView Self.java 를 새로 만 듭 니 다.
public class ImageViewSelf extends ImageView {
	//     paint  ,     canvas          
	Paint paint = new Paint();
	//  piece.jpg     ,  Bitmap  
	private Bitmap  bitmap;
	
	//                 
	public ImageViewSelf(Context context) {
		super(context);
	}

	public ImageViewSelf(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public ImageViewSelf(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	//  bitmap     
	public void initImage(){
		bitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.piece));
	}
	
	//  onDraw  
	public void onDraw(Canvas canvas) 
		{
			//     onDraw  
			super.onDraw(canvas);
			if(bitmap!=null){
				// 150,150     bitmap  
				canvas.drawBitmap(bitmap, 150, 150, paint);
			}
			 
	    }
	
	


}

  2.main 의 ImageView 를 ImageViewself.test.ImageViewSelf 로 수정
<Imagetest.test.ImageViewSelf
	android:id="@+id/board"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"></Imagetest.test.ImageViewSelf>

  3.main.java 수정
	public void onCreate(Bundle savedInstanceState) {	
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//   findViewById  ImageView
		board = (ImageViewSelf) findViewById(R.id.board);
		//  ImageView      
		board.setImageResource(R.drawable.board);
		//   findViewById  ImageButton
		piece = (ImageButton) findViewById(R.id.piece);
		//  ImageButton      
		piece.setImageResource(R.drawable.piece);
		//     
		piece.setOnClickListener(cl);
	}
	//	          
	private Button.OnClickListener cl = new Button.OnClickListener() {
		public void onClick(View v) {
			//  intitImage  ,      
			board.initImage();
			//  board,    onDraw
			board.invalidate();
		}
	};
	//     ImageView
	private ImageViewSelf board;
	private ImageButton piece;

}

  4.수정 이 끝나 면 프로그램 을 실행 하고 바둑판 에 바둑 알 이 없 기 시작 합 니 다.단 추 를 누 르 면 initImage()와 invalidata()방법 을 실행 한 후 바둑 알 이 나 오 기 를 바 랍 니 다.
첨부 파일 의 imagetest 2.jpg 와 같은 프로그램 실행 결과
 
paint 류 는 붓 의 색상 등 인 자 를 설정 할 수 있 습 니 다.canvas 에 서 는 그림,원형,사각형 등 여러 가지 도형 을 그 리 는 방법 을 제공 합 니 다.
상기 두 종 류 를 결합 하여 사용 하면 자바 의 Graphics 에 해당 한다.
안 드 로 이 드 그림 의 예 도 완성 되 었 습 니 다!
 
첫 번 째 예 의 모든 코드 와 파일 은 imagetest 압축 파일 에 있 습 니 다.
두 번 째 예 의 모든 코드 와 파일 은 imagetest 2 압축 파일 에 있 습 니 다.
미 해결 문제:
1.구문 bitmap=Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(),R.drawable.piece)사용 하기;얻 은 그림 의 크기 는 실제 보다 약간 작다.  ??
2.ImageViewSelf 에서 구조 방법 에서 각 매개 변수의 의미.??
 
계속:전에 언급 한 첫 번 째 문제 에 대해 Rect 를 사용 하여 그림 의 크기 를 조절 할 수 있 습 니 다.
쓰다 canvas. drawBitmap  ( Bitmap  bitmap,  Rect  src,  RectF  dst,  Paint  paint)
 첫 번 째 Rect src 는 그 려 야 할 bitmap 그림 의 구역 입 니 다.rect 의 구조 방법 에서 네 개의 매개 변 수 는 왼쪽 좌표,위 좌표,오른쪽 좌표 와 아래 좌표 입 니 다.
자바 가 습관 적 으로 왼쪽 좌표,위 좌표,너비 와 높이 가 아 닙 니 다. 
두 번 째 Rect. dst 는 view 의 어느 영역 에 그림 을 그립 니까?       예:
     Rect src = new Rect(0, 0,35,35);
	Rect dst = new Rect(50,50, 90,90);
	 canvas.drawBitmap(cursor,src,dst,paint);

    이상 코드 는 view 의 dst 영역 에서 bitmap 대상 cursor 의 0,0,35,35 그림 을 그립 니 다.
    두 Rect 크기 가 일치 하지 않 으 면 상관 없습니다.그 릴 때 자동 으로 채 워 집 니 다.

좋은 웹페이지 즐겨찾기