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

안드로이드 선 두께 조절 하는 방법

0 추천

 

MyView.java

public class MyView extends View{

 ArrayList<Point> list;
 
 static final int RED_STATE=0;
 static final int BLUE_STATE=1;
 static final int YELLOW_STATE=2;
 static final int WHITE_STATE=3;
 static final int BLACK_STATE=4;
 static final int GREEN_STATE=5;

 int mStrokeWidth = 15; // 시작 선 두께
 int colorState = BLACK_STATE; // 시작 선
 
 Paint[] paintList = new Paint[6];
 
 public MyView(Context context) {
  super(context);
  init();//초기화
 }
 
 public MyView(Context context, AttributeSet attrs){
  super(context, attrs);
  init();//초기화
 }
 
 public void init(){
  list=new ArrayList<Point>();
  
  Paint  redPaint = new Paint();  
  redPaint.setColor(Color.RED);
  redPaint.setStrokeWidth(mStrokeWidth); //선의 굵기
  redPaint.setAntiAlias(true);//경계면을 부드럽게 처리하기
  
  Paint  bluePaint = new Paint();
  bluePaint.setColor(Color.BLUE);
  bluePaint.setStrokeWidth(mStrokeWidth); //선의 굵기
  bluePaint.setAntiAlias(true);//경계면을 부드럽게 처리하기
  
  Paint  yellowPaint = new Paint();
  yellowPaint.setColor(Color.YELLOW);
  yellowPaint.setStrokeWidth(mStrokeWidth); //선의 굵기
  yellowPaint.setAntiAlias(true);//경계면을 부드럽게 처리하기
  
  Paint  clearPaint1 = new Paint();
  clearPaint1.setColor(Color.WHITE);
  clearPaint1.setStrokeWidth(50); //선의 굵기
  clearPaint1.setAntiAlias(true);//경계면을 부드럽게 처리하기
  
  Paint  blackPaint = new Paint();
  blackPaint.setColor(Color.BLACK);
  blackPaint.setStrokeWidth(mStrokeWidth); //선의 굵기
  blackPaint.setAntiAlias(true);//경계면을 부드럽게 처리하기
  
  Paint  greenPaint = new Paint();
  greenPaint.setColor(Color.GREEN);
  greenPaint.setStrokeWidth(mStrokeWidth); //선의 굵기
  greenPaint.setAntiAlias(true);//경계면을 부드럽게 처리하기

  paintList[0]=redPaint;
  paintList[1]=bluePaint;
  paintList[2]=yellowPaint;
  paintList[3]=clearPaint1;
  paintList[4]=blackPaint;
  paintList[5]=greenPaint;
  
 }
 
 public void onDraw(Canvas canvas) {
  canvas.drawColor(Color.WHITE);
  
  for(int i=0 ;i < list.size(); i++){
   Point p = list.get(i);
   if(!(p.isStart)){ //해당 인텍스의 isStart 값이 true가 아니라면
    canvas.drawLine(list.get(i-1).x, list.get(i-1).y,list.get(i).x, list.get(i).y, paintList[list.get(i).colorState]); //선의 속성을 가지고 있는 paint객체
   }
  }
 }

 

FreeLine.java (버튼부분만 가져왔습니다.)

 

public void onClick3(View v){ 
  final Button mSize = (Button)findViewById(R.id.but_thickness);
  PopupMenu popup = new PopupMenu(this, v);
  MenuInflater inflater = popup.getMenuInflater();
  Menu menu = popup.getMenu();
  inflater.inflate(R.menu.popupmenu2, menu);
  popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
   
   @Override
   public boolean onMenuItemClick(MenuItem item) {
    int id = item.getItemId();
    if(id == R.id.thickness_15){
     myView.mStrokeWidth=15;
    }
    if(id == R.id.thickness_20){
     myView.mStrokeWidth=20;
    }
    if(id == R.id.thickness_25){
     myView.mStrokeWidth=25;
    }
    if(id == R.id.thickness_30){
     myView.mStrokeWidth=30;
    }
    if(id == R.id.thickness_35){
     myView.mStrokeWidth=35;
    }

    return false;
   }
  });
  popup.show();
 }

 

위와 같이하면 선 두께는 그대로 나와요 ㅠㅠ 두께 각각 다르게 잡아주는 방법이 업나요?

 

성수소년 (550 포인트) 님이 2015년 10월 18일 질문

1개의 답변

0 추천
return false 전에 mView.invalidate(); 호출하세요
aucd29 (218,390 포인트) 님이 2015년 10월 19일 답변
...