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

초보자 위젯 이미지 변경 방법에 대해 알고 싶어요

0 추천
안드로이드 시작한지 얼마 안된 초보자입니다.

제가 연습용 소스 많이 찾아보며 연습해봤지만 아직도 많이 모자르고 서툴러서 질문을 좀드릴려고해요.

제가 시계위젯 이미지를 바꾸고 싶어요. 그런데 res -> drawble 어쩌구하는 곳이 이미지관련한 곳이라고 들었는데

그곳엔 이미지가 안드로이드 모양만 있고 바꾸는 방법을 찾아봐도 없고... 막상 바꿀려니 정말 막막하네요..

바꾸는방법좀 가르쳐주세요~

 

ps : 질문의 요점. 시계위젯모양을 바꾸고 싶어요,
음유시인 (120 포인트) 님이 2014년 2월 17일 질문
안드로이드 내장된 기본 시계어플의 이미지를 바꾸고 싶으신 건가요?
소스코드만 있어서 xml 에 Grapical Layout을 눌러서 이미지형태를 봤는데 Pallete에 기본적으로 있는 시계이미지(?)를 사용하고 있길래
이거말고 제가 만든 다른 시계이미지로 사용하고 싶어요.
palette 에 있는 시계 위젯을 말씀하신거군요 ㅎㅎ
배경이미지를 넣는다던가 정도는 컨트롤 할수 있어도
시계 형태를 변경한다던가는 안되는 걸로 알고 있어요
시계를 직접 만드셔야 할듯 '-'?! 시계는 생각보다 간단해서
만드는데 어렵지는 않으실거에요
제가 시계 이미지는 만들었는데 그걸로 대체할 방법은 없을까요?
혹시... 아래 코드가 자바코든데 밑줄없이 이상은 없는데
실행을 하면 에러가 뜨거든요.. 어디가 잘못된건지좀 알려주실수도 있나요?

package exam.MidtermExam;
import java.util.Date;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import java.util.Calendar;
import java.util.GregorianCalendar;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.os.Handler;
import android.os.Message;
import android.view.View;
public class MidtermExam extends Activity {
  Canvas mCanvas;  
   
   private Bitmap mClock;
   private Bitmap mCenter;
   private Bitmap mPin[] = new Bitmap[3];  
  
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        mHandler.sendEmptyMessageDelayed(0, 1000);
    }
    
    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
         // TODO Auto-generated method stub
         //super.handleMessage(msg);
         drawClock(mCanvas);
         //invalidate();
         mHandler.sendEmptyMessageDelayed(0, 1000);
         }
        };
        
        protected void onDraw(Canvas canvas) {
         // TODO Auto-generated method stub
         //super.onDraw(canvas);
                
         mClock = BitmapFactory.decodeResource(this.getResources(), R.drawable.dial);                   
         mCenter = BitmapFactory.decodeResource(this.getResources(), R.drawable.center);
         mPin[0] = BitmapFactory.decodeResource(this.getResources(), R.drawable.sec_n2);         
         mPin[1] = BitmapFactory.decodeResource(this.getResources(), R.drawable.min_n2);         
         mPin[2] = BitmapFactory.decodeResource(this.getResources(), R.drawable.hour_n2);   
         
         mCanvas = canvas;
         drawClock(canvas);     
         
         }     
        
        private void drawClock(Canvas canvas) {
         // TODO Auto-generated method stub                   
         GregorianCalendar mCalendar = new GregorianCalendar();
         int hour = mCalendar.get(Calendar.HOUR);
         int min = mCalendar.get(Calendar.MINUTE);    
         int sec = mCalendar.get(Calendar.SECOND);    
         float rSec = sec *6 ;
         // 360도 / 60초 = 6도/초        
         float rMin = min*6 + rSec/60;
         //         
         float rHour = hour*30 + rMin/12 ;
         int w = mClock.getWidth()/2;
         // 반폭        
         int h = mClock.getHeight()/2;  
         int w1=mPin[0].getWidth()/2;    
         int h1=mPin[0].getHeight()-28;    
         int w2=mPin[1].getWidth()/2;    
         int h2=mPin[1].getHeight()-15;     
         int w3=mPin[2].getWidth()/2;    
         int h3=mPin[2].getHeight()-15;
         int w4=mCenter.getWidth()/2;    
         int h4=mCenter.getHeight()-40;
         int cx = mClock.getWidth()/2;       
         int cy = mClock.getHeight()/2;      
         canvas.drawBitmap(mClock, cx-w, cy-h, null);   
         canvas.rotate(rHour,cx,cy);        
         canvas.drawBitmap(mPin[2],cx-w3,cy-h3,null);
         //시침 맨아래                  
         canvas.rotate(rMin-rHour,cx,cy);  
         canvas.drawBitmap(mPin[1],cx-w2,cy-h2,null);
         canvas.rotate(rSec-rMin,cx,cy);      
         canvas.drawBitmap(mPin[0],cx-w1,cy-h1,null);
         //초침 맨위에                           
         canvas.rotate(-rSec,cx,cy);    
         canvas.drawBitmap(mCenter, cx-w4, cy-h4, null);   
        
        }
}
질문에 대한 답은 아니지만 위의 소스코드를 보고 댓글 남김니다..안드로이드에서는 에러가 떠서 실행이 정지되면 대부분 로그캣을 남겨주는데요. 그 로그캣의 정보와 해당하는 곳의 소스코드 그리고 의심이 갈만한 곳을 함께 올려준다면 답을 해주는 입장에서도 훨씬 수월합니다.
음.. 뷰가 없어서 그런 것 같은데요?

부연설명을 살짝 하자면 메인액티비티를 표시할땐
setContentView 가 있어야하듯이
지금 소스에는 캔버스를 그리는 부분은 있지만 뷰가 없어요 ㅎㅎ
예를 들면 뷰를 상속받은 클래스인 MyView를 만들고 다음과 같이해줘야해요
setContentView(new MyView(this));  

참고하세요~
http://www.cyworld.com/hyss2s2/4834592

1개의 답변

0 추천
초보개발자ㅠ (33,870 포인트) 님이 2014년 2월 17일 답변
...