标尺自定义视图

时间:2015-10-04 06:14:03

标签: android android-custom-view

我创建了一个看起来像学校典型统治者的统治者。我想知道的是,这是什么样的公式" int size =(i%2.5 == 0)? 2000:13;"。 我已成功解决了创建此视图但我真的不知道这个公式是如何工作的。谁能解释一下?

enter image description here

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

2 个答案:

答案 0 :(得分:3)

声明

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,则为大小指定值2000 else,则分配为13.

值可以使此条件true 5,10,15 等。

答案 1 :(得分:0)

@donmj https://stackoverflow.com/questions/41342096/confused-by-this-crash-log?noredirect=1#comment70539863_41342096

我已经解决了这次崩溃。我在一个具有透明背景的片段中创建一个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