标尺自定义视图
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
我制作了一把尺子,看起来像学校里的普通尺子。我想知道的是,这个"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