标尺自定义视图

Ruler Custom View

我制作了一把尺子,看起来像学校里的普通尺子。我想知道的是,这个"int size = (i%2.5==0) ? 2000 : 13;"是什么公式。 我已经成功解决了创建这个视图的问题,但我真的不知道这个公式是如何工作的。谁能解释一下?

public class ColorRulerView extends View {
    Paint paint = new Paint();
    static final private float pxinch = 500 / 67.f * 25.4f / 16;
    float width, height;

    public ColorRulerView(Context context, AttributeSet foo) {
        super(context, foo);
        setBackgroundColor(Color.TRANSPARENT);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeWidth(0);
        paint.setAntiAlias(false);
        paint.setColor(Color.WHITE);
    }

    public void onSizeChanged(int w, int h, int oldW, int oldH) {
        width = w;
        height = h;
    }

    public void onDraw(Canvas c) {
        for (int i = 0; ; ++i) {
            float x = i * pxinch;
            if (x > 5000) {
                break;
            }
            int size = (i%2.5==0) ? 2000 : 13;
            c.drawLine(x, 2, x, size, paint);
        }
        super.onDraw(c);
    }
  }

声明

int size = (i%2.5==0) ? 2000 : 13 

是一个ternary操作。

让我们分解一下:

(i % 2.5) :当 i 的值除以 2.5 时,将产生提醒。所以,如果

i = 3, 3 % 2.5 = 0.5

i = 4, 4 % 2.5 = 1.5

假设i = 3,结果为0.5,不等于0。因此,大小为13。

当条件(i % 2.5 == 0)true时,size赋值2000else,赋值为13。

可以使这个条件true的值有5,10,15

@donmj

我已经解决了这个崩溃。我在具有透明背景的片段中创建了一个 popupWindow,当我触摸背景时,我编写代码以关闭 popupWindow,但是......它崩溃了。我的触摸事件代码是:

 background.setOnTouchListener(new View.OnTouchListener{

   public boolean onTouch(View v, MotionEvent e){
      popupWindow.dismiss;
      return true;
   }

 });

我将我的代码修改为:

 background.setOnClickListener(new View.OnClickListener{

    public void onClick(View v){
        popupWindow.dismiss();
    }
})

一切都完成了。大概还得研究一下触摸事件系统吧……TAT