画布不在真实设备中更新

时间:2013-08-28 01:22:28

标签: android android-canvas

我尝试使用画布制作画线。加载Activity时它有0值然后我有一个具有点击监听器的Button来更改值并绘制一条线。它在模拟器中运行良好,但是当我在我的真实设备(Android版本4.1)中运行时,画布没有改变,但我知道我按下了按钮,因为我在点击监听器中放了一个吐司。这真的很奇怪。

以前有人遇到过同样的问题吗? 任何想法都将受到高度赞赏。

以下是我的活动:

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);   
    }

}

1 个答案:

答案 0 :(得分:0)

您需要向onMeasure课程添加Draw实施。有关详细信息,请查看http://developer.android.com/training/custom-views/custom-drawing.html