【问题标题】:updating ProgressBar in android在android中更新ProgressBar
【发布时间】:2012-08-06 04:32:56
【问题描述】:
Image.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                Trace(array);
                .....
                int  print_prog;
                int total_pixels = mPixels_printedpixelcomparison.capacity();
                **print_prog** = (printedpixel/total_pixels)*100;
                printProgress.setProgress(**print_prog**);
                ......
           }




  private Bitmap Trace(int[] imageArray)
  {
    .....
    printedpixel +=100;
    .....   


 }

在上面的代码中 print_prog 始终为零,并且我的进度条也没有任何变化(它只是空白)导致零...有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: android progress-bar touch-event ontouchlistener


    【解决方案1】:

    这里的问题是int 部门。在 Java 中,int 除法会截断余数,因此它可以返回 int

    (printedpixel/total_pixels)*100;
    

    printedpixel/total_pixels 因此将始终返回 0。而 0*100 永远是 0。

    您可以使用double's 或float's 解决此问题。

    double  print_prog;
    double total_pixels = (double) mPixels_printedpixelcomparison.capacity();
    **print_prog** = (printedpixel/total_pixels)*100;
    printProgress.setProgress(**print_prog**);
    

    【讨论】:

    • setProgress() API 只接受 int....和 ​​int,它确实会截断,但它仍然应该具有正确的值???为什么是零???
    • @jxgn 它被截断,例如,150/200 = 0.75。然后75 部分被截断,因为它是 Int 并且你总是有 0。
    • 那么我乘以 100 呢??
    • ok 更改为 float 并将 print_prog 类型转换为 setProgress() 内的 int,这有效.....谢谢 :)
    【解决方案2】:

    @nicholas.hauschild 的回答是正确的,但是更简单快捷的解决方案是替换

    (printedpixel/total_pixels)*100;
    

    (printedpixel*100/total_pixels);
    

    【讨论】:

    • @jxgn 如果printedpixeltotal_pixelsInts,那么(printedpixel*100/total_pixels) 也将是Int
    猜你喜欢
    • 2017-08-15
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多