2013-08-28 5 views
0

캔버스를 사용하여 그리기 선을 만들려고합니다. 액티비티가로드 될 때 값이 0입니다. 그러면 값을 변경하고 선을 그릴 수있는 클릭 리스너가있는 버튼이 있습니다. 그것은 잘 에뮬레이터에서 작동하지만 내 실제 장치 (안드로이드 버전 4.1)에서 실행 캔버스가 변경되지 않았지만 나는 클릭 청취기 안에 건배를하기 때문에 버튼을 누르십시오. 이것은 정말로 이상합니다.캔버스가 실제 장치에서 업데이트되지 않습니다.

이전에 같은 문제가 발생 했습니까? 모든 의견을 높이 평가할 것입니다. 당신은 당신의 Draw 클래스에 onMeasure 구현을 추가 할 필요가

public class MainActivity extends Activity{ 

    private Paint paintFree = new Paint(); 
    private Paint paintLocal = new Paint(); 
    private Paint paintRoaming = new Paint(); 

    private int freeUsage = 0; 
    private int localUsage = 0; 
    private int roamingUsage = 0; 

    private int freeBarPoints; 
    private int localBarPoints; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     overridePendingTransition(0, 0); 
     line(); 

     ((Button) findViewById(R.id.btn1)).setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       freeUsage = 12; 
       localUsage = 1; 
       roamingUsage = 1; 
       line(); 
       Log.i("Hit Btn1", "True"); 
       Toast.makeText(v.getContext(), "Hit Btn1", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

    } 

    class Draw extends View{ 

     public Draw(Context context) { 
      super(context); 
      // TODO Auto-generated constructor stub 

      paintFree.setStrokeWidth(20f); 
      paintLocal.setStrokeWidth(20f); 
      paintRoaming.setStrokeWidth(20f); 

      if (freeUsage == 0){ 
        paintFree.setColor(Color.GRAY); 
       } else { 
        paintFree.setColor(Color.rgb(70, 227, 78)); 
       } 
       if (localUsage == 0){ 
        paintLocal.setColor(Color.GRAY); 
       } else { 
        paintLocal.setColor(Color.rgb(238, 232, 102)); 
       } 
       if (roamingUsage == 0){ 
        paintRoaming.setColor(Color.GRAY); 
       } else { 
        paintRoaming.setColor(Color.rgb(101, 177, 231)); 
       } 

     } 

     protected void onDraw(Canvas canvas) { 

      int maxBarLength = canvas.getWidth() * 4/5; 
      double totalBarPoints = freeUsage + localUsage + roamingUsage; 
      freeBarPoints = (int) Math.round(freeUsage * maxBarLength/totalBarPoints); 
      localBarPoints = (int) Math.round(localUsage * maxBarLength/totalBarPoints); 
      // need not compute the roaming bar points 

      int localStartX = 0 + Math.round(freeBarPoints); 
      int roamingStartX = (int) localStartX + Math.round(localBarPoints); 

      canvas.drawLine(0, 10, localStartX, 10, paintFree); 
      canvas.drawLine(localStartX, 10, roamingStartX, 10, paintLocal); 
      canvas.drawLine(roamingStartX, 10, maxBarLength, 10, paintRoaming); 
     } 


    } 

    public void line(){ 
     Draw draw; 
     draw = new Draw(this); 
     ((LinearLayout) findViewById(R.id.linear)).addView(draw); 
    } 

} 

답변

관련 문제