마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

View클래스에서 시간막대바를 만들고 싶습니다..

0 추천
package com.example.test01;

import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;


public class Stage1 extends View{
	Bitmap Img1,Img2,Img3,Img4,Img5,Img6,Img7,Img8,Img9,Background;
	int width=MainActivity.screenWidth;
	int height=MainActivity.screenHeight;
	int rectL;
	Rect rect1;
	Rect rect2;
	Rect rect3;
	Rect rect4;
	Rect rect5;
	Rect rect6;
	Rect rect7;
	Rect rect8;
	Rect rect9;
	Paint rectPaint ;
	Context context;
	int X,Y;
	int count[][]={{0,0,0},{0,0,0},{0,0,0}};
	int answer[][]={{1,0,0},{1,1,3},{0,0,0}};
	int midx=(width/2)-150;
	int midy=(height/2)+120;
	Bitmap scaledBitmap;
	int time;
	
	public Stage1(Context context) {
		  super(context);
		  
		  this.context=context;
		  
		  handler.sendEmptyMessage(0);
		  init();//초기화 하기
		  //핸들러를 호출해서 화면이 주기적으로 갱신되도록 한다.
		  
		 }
	 public void init(){
		  //이미지 읽어오기
		  Img1=BitmapFactory.decodeResource
		      (getResources(), R.drawable.roadg);
		  Img2=BitmapFactory.decodeResource
			      (getResources(), R.drawable.road12);
		  Img3=BitmapFactory.decodeResource
			      (getResources(), R.drawable.road34);
		  Img4=BitmapFactory.decodeResource
			      (getResources(), R.drawable.road41);
		  Img5=BitmapFactory.decodeResource
			      (getResources(), R.drawable.roadc);
		  Img6=BitmapFactory.decodeResource
			      (getResources(), R.drawable.road41);
		  Img7=BitmapFactory.decodeResource
			      (getResources(), R.drawable.road34);
		  Img8=BitmapFactory.decodeResource
			      (getResources(), R.drawable.road23);
		  Img9=BitmapFactory.decodeResource
			      (getResources(), R.drawable.roads);
		  Background=BitmapFactory.decodeResource
			      (getResources(), R.drawable.background);
		  //렉트의 속성 설정
		  rectPaint=new Paint();
		  rectPaint.setAlpha(0);
		  rectPaint.setStyle(Style.FILL);
		  //이미지 좌표 설정
		  scaledBitmap = Bitmap.createScaledBitmap(Background,width, height, true);
		  
		  
	 }
	 
	 @Override
	 protected void onDraw(Canvas canvas){
		 canvas.drawBitmap(scaledBitmap,0,0,null);
		 int leftx = midx-350;
		 int rightx = midx+350;
		 int topy = midy-350;
		 int bottomy = midy+350;
		 //1번째 라인
		 canvas.drawBitmap(Img1,leftx,topy,null);
		 canvas.drawBitmap(Img2,midx,topy,null);
		 canvas.drawBitmap(Img3,rightx,topy,null);
		 //2번째 라인
		 canvas.drawBitmap(Img4,leftx,midy,null);
		 canvas.drawBitmap(Img5,midx,midy,null);
		 canvas.drawBitmap(Img6,rightx,midy,null);
		 //3번째 라인
		 canvas.drawBitmap(Img7,leftx,bottomy,null);
		 canvas.drawBitmap(Img8,midx,bottomy,null);
		 canvas.drawBitmap(Img9,rightx,bottomy,null);
		 
		 //1번째라인
		 rect1=new Rect(leftx,topy,leftx+320, topy+320);
		 canvas.drawRect(rect1, rectPaint);
		 rect2=new Rect(midx,topy,midx+320,topy+320);
		 canvas.drawRect(rect2, rectPaint);
		 rect3=new Rect(rightx,topy,rightx+320,topy+320);
		 canvas.drawRect(rect3, rectPaint);
		 //2번째 라인
		 rect4=new Rect(leftx,midy,leftx+320, midy+320);
		 canvas.drawRect(rect4, rectPaint);
		 rect5=new Rect(midx,midy,midx+320,midy+320);
		 canvas.drawRect(rect5, rectPaint);
		 rect6=new Rect(rightx,midy,rightx+320,midy+320);
		 canvas.drawRect(rect6, rectPaint);
		 //3번째 라인
		 rect7=new Rect(leftx,bottomy,leftx+320,bottomy+320);
		 canvas.drawRect(rect7, rectPaint);
		 rect8=new Rect(midx,bottomy,midx+320,bottomy+320);
		 canvas.drawRect(rect8, rectPaint);
		 rect9=new Rect(rightx,bottomy,rightx+320,bottomy+320);
		 canvas.drawRect(rect9, rectPaint);
	}
	 
	 @Override
	 public boolean onTouchEvent(MotionEvent event) {
	        if (event.getAction() == MotionEvent.ACTION_DOWN) {
	            int x = (int) event.getX();
	            int y = (int) event.getY();
	            //1번째라인
	            if (rect1.contains(x, y) == true){
	            	CountN(0,0);
	                Img1=imgRotate(Img1);
	            	Toast.makeText(getContext(), ""+count[0][0], Toast.LENGTH_SHORT).show();
	            	Answer();
	            }
	            else if(rect2.contains(x, y) == true){
	            	Count(0,1);
	            	Img2=imgRotate(Img2);
	            	Toast.makeText(getContext(), ""+count[0][1], Toast.LENGTH_SHORT).show();
	            	
	            }
	            else if(rect3.contains(x, y) == true){
	            	Count(0,2);
	            	Img3=imgRotate(Img3);
	            	Toast.makeText(getContext(), ""+count[0][2], Toast.LENGTH_SHORT).show();
	            	
	            }
	            //2번째라인
	            else if(rect4.contains(x, y) == true){
	            	Count(1,0);
	            	Img4=imgRotate(Img4);
	            	Toast.makeText(getContext(), ""+count[1][0], Toast.LENGTH_SHORT).show();
	            	Answer();
	            }
	            else if(rect5.contains(x, y) == true){
	            	Count(1,1);
	            	Img5=imgRotate(Img5);
	            	Toast.makeText(getContext(), ""+count[1][1], Toast.LENGTH_SHORT).show();
	            	
	            }
	            else if(rect6.contains(x, y) == true){
	            	Count(1,2);
	            	Img6=imgRotate(Img6);
	            	Toast.makeText(getContext(), ""+count[1][2], Toast.LENGTH_SHORT).show();
	            	Answer();
	            }
	            //3번째라인
	            else if(rect7.contains(x, y) == true){
	            	Count(2,0);
	            	Img7=imgRotate(Img7);
	            	Toast.makeText(getContext(), ""+count[2][0], Toast.LENGTH_SHORT).show();
	            	
	            }
	            else if(rect8.contains(x, y) == true){
	            	Count(2,1);
	            	Img8=imgRotate(Img8);
	            	Toast.makeText(getContext(), ""+count[2][1], Toast.LENGTH_SHORT).show();
	            	
	            }
	            else if(rect9.contains(x, y) == true){
	            	CountN(2,2);
	            	Img9=imgRotate(Img9);
	            	Toast.makeText(getContext(), ""+count[2][2], Toast.LENGTH_SHORT).show();
	            	Answer();
	            }
	            else
	                Toast.makeText(getContext(), "Miss", Toast.LENGTH_SHORT).show();
	        }
	        return false;
	    }
	 private Bitmap imgRotate(Bitmap bmp){
			int width = bmp.getWidth(); 
			int height = bmp.getHeight(); 
			
			Matrix matrix = new Matrix(); 
			matrix.postRotate(90); 

			Bitmap resizedBitmap = Bitmap.createBitmap(bmp, 0, 0, width, height, matrix, true); 
			bmp.recycle();
			
			return resizedBitmap;
	}
	 
	 private void Count(int n1, int n2){
		 if(count[n1][n2]<3)
			count[n1][n2]++;
		else if(count[n1][n2]==3)
			count[n1][n2]=0;
	 }
	 private void CountN(int n1, int n2){
		 if(count[n1][n2]==0)
			count[n1][n2]++;
		else if(count[n1][n2]==1)
			count[n1][n2]=0;
	 }
	 
	 private void Answer(){
		 if((count[0][0]==answer[0][0] && count[1][0]==answer[1][0] && count[1][2]==answer[1][2]
				 && count[2][2]==answer[2][2])==true)
		 ((MainActivity)context).dialog();
	 }
	 
	
	 Handler handler=new Handler(){
		  public void handleMessage(android.os.Message msg) {
		   //화면 갱신 
		   invalidate();
		   handler.sendEmptyMessageDelayed(0, 10);
		  }
	 };
	 
}

이미지 배치한거 위에다가 시간막대바를 구현해보고 싶어서 질문드립니다..

이미지1이 길을 따라 이미지2를 따라잡는 형식으로 구현하려구 합니다.

xml은 사용하지 않고 순수 java코드로만 해야하는데...

도움 주시면 정말로 감사드리겠습니다.

카카메카 (240 포인트) 님이 2015년 11월 18일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...