@Override
public boolean onTouchEvent(MotionEvent e) {
mScaleDetector.onTouchEvent(e);
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN: {
float x = e.getX();
float y = e.getY();
mPreviousX = x;
mPreviousY = y;
// Save the ID of this pointer
mActivePointerId = e.getPointerId(0);
break;
}
case MotionEvent.ACTION_MOVE: {
final int pointerIndex = e.findPointerIndex(mActivePointerId);
final float x = e.getX(pointerIndex);
final float y = e.getY(pointerIndex);
if (!mScaleDetector.isInProgress()) {
mRenderer.setLineCoordinates(mPreviousX, mPreviousY, x, y);
requestRender();
}
mPreviousX = x;
mPreviousY = y;
break;
}
case MotionEvent.ACTION_UP: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_CANCEL: {
mActivePointerId = INVALID_POINTER_ID;
break;
}
case MotionEvent.ACTION_POINTER_UP: {
final int pointerIndex = (e.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK)
>> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
final int pointerId = e.getPointerId(pointerIndex);
if (pointerId == mActivePointerId) {
// This was our active pointer going up. Choose a new
// active pointer and adjust accordingly.
final int newPointerIndex = pointerIndex == 0 ? 1 : 0;
mPreviousX = e.getX(newPointerIndex);
mPreviousY = e.getY(newPointerIndex);
mActivePointerId = e.getPointerId(newPointerIndex);
}
break;
}
}
return true;
}
在我的呈现器类上:
public void onDrawFrame(GL10 gl) {
// Draw background color
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
// Set GL_MODELVIEW transformation mode
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity(); // reset the matrix to its default state
// When using GL_MODELVIEW, you must set the view point
GLU.gluLookAt(gl, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
gl.glScalef(factor, factor, 0.0f);
// Draw triangle
mTriangle.draw(gl);
mLine.draw(gl);
}
函数在呈现器类中更改坐标:
public void setLineCoordinates(float mPreviousX
, float mPreviousY, float x, float y) {
// TODO Auto-generated method stub
lineCoords[0] = (float) (mPreviousX * 2.0 / WIDTH - 1.0);
lineCoords[1] = (float) (mPreviousY * -2.0 / HEIGHT + 1.0);
lineCoords[2] = 0.0f;
lineCoords[3] = (float) (x * 2.0 / WIDTH - 1.0);
lineCoords[4] = (float) (y * -2.0 / HEIGHT + 1.0);
lineCoords[5] = 0.0f;
}
当我移动手指时,没有线,只有一条移动的小线...我怎样才能画出整条线,并在我不断移动手指的同时保持线描?当我再次触屏时,也开始新的一行。
public void setLineCoordinates(float mPreviousX
, float mPreviousY, float x, float y) {
// TODO Auto-generated method stub
float lineCoords[] = new float[6];
lineCoords[0] = (float) (mPreviousX * 2.0 / WIDTH - 1.0);
lineCoords[1] = (float) (mPreviousY * -2.0 / HEIGHT + 1.0);
lineCoords[2] = 0.0f;
lineCoords[3] = (float) (x * 2.0 / WIDTH - 1.0);
lineCoords[4] = (float) (y * -2.0 / HEIGHT + 1.0);
lineCoords[5] = 0.0f;
bufferOfArrays.add(new Line(lineCoords));
if(isFirst) {
isFirst = false;
listOfArrays.addAll(bufferOfArrays);
view.requestRender();
}
}
public void setFirst(boolean isFirst) {
this.isFirst = isFirst;
}
@Override
public void onDrawFrame(GL10 gl) {
//... color, matrix, look at etc..
// Draw triangle
//mTriangle.draw(gl);
//TODO mLine.draw(gl);
for(Line line : listOfArrays) {
line.draw(gl);
}
isFirst = true;
}
这里的问题是,您总是在每一步都设置mPreviousX和mPreviousY。实际上,问题始于您为这些参数选择的名称。更好的名称是mlinestartx/y。
设置mlineStartx/y,然后每次移动都更新x/y,不要更改mlineStartx/y。
至于添加多行,您需要实现更多的逻辑。您需要维护您定义的具有2point(2xpointfs)的某个类的数组列表。当用户举起手指(touch up/touch cancel)时,用2点创建一个新的类,在render方法上,确保遍历所有这样的行并呈现它们。
问题内容: 这是我的问题…: 在我的活动中,我有一个和一个。我希望Button仅在显示某个可绘制对象时才执行操作。是的,这意味着该代码正在各种可绘制对象之间进行动画处理,从而使其不会中断我想要完成的工作。 没用 并且我将其范围缩小到“ if(vari(drawabledrawable == acertaindrawable)”行的错误。尽管Eclipse并没有公然报告两个可绘制对象是否相同的And
许多插件,比如buttons,自己就做了它们所有的绘制工作。比如你仅仅需要告诉它们你想看到的标签、你想它们使用的字体、绘制按钮的轮廓和焦点矩形。有时候,有必要做些自定义的绘制。在这种情况下,一个 GtkDrawingArea控件可能是正确的选择,这个控件提供了一个画布,在这个画布上你可以绘制并且将其连接到”draw“信号。 控件的内容常常需要被部分或者全部重新绘制。比如,当另一个窗口控件被移动并且
问题内容: 我想在PDFBox中用透明线绘制线条和多边形。这是一些有关如何绘制蓝线的示例代码,但是我无法弄清楚更改颜色的Alpha值。 问题答案: 您不能使用的alpha值,因为PDFBox仅使用RGB值。根据它的javadoc 只是: 设置描边颜色,指定为RGB。 一种选择是将背景色设置为描边色,以使线条不可见。 注意- 不可见!=透明(因此您不会获得透视效果)
绘制线 点击菜单栏或底下快捷工具栏中的“绘制线”按钮,按照弹出对话框进行线的绘制。 使用鼠标在地图上连续点击,双击完成线的绘制后弹出属性信息对话框,可以在“说明”栏中查看并修改对于该线的说明。 在“空间信息”栏中可以看到节点的坐标信息,双击一个节点的坐标信息后可修改该节点的坐标信息,也可在三维地球上选中节点直接移动修改。 在“样式”栏修改线的
绘制线 点击菜单栏或底下快捷工具栏中的“绘制线”按钮,按照弹出对话框进行线的绘制。 使用鼠标在地图上连续点击,双击完成线的绘制后弹出属性信息对话框,可以在“说明”栏中查看并修改对于该线的说明。 在“空间信息”栏中可以看到节点的坐标信息,双击一个节点的坐标信息后可修改该节点的坐标信息,也可在三维地球上选中节点直接移动修改。 在“样式”栏修改线的
主界面,点击绘制按钮,即可进入绘制模式: 绘制模式包括:高级工具、手绘、撤销、重绘、退出绘制、线面切换、保存绘制。 添加节点:点击按钮后,以屏幕十字丝位置添加一个节点; 除添加节点按钮外,也可对地图中任意位置进行点击操作,点击后该位置也会进行添加操作: 撤销:点击后,删除上一个节点,可以连续删除; 重绘:点击后会弹
我正在尝试使用GeoJSON在地图上绘制点。我阅读了文件,其中说明: 可以通过调用数据对象的loadGeoJSON()方法来加载和显示GeoJSON文件 (https://developers.google.com/maps/documentation/javascript/datalayer) 但是,同一页上的示例代码显示: map.data.loadGeoJson(…) 因此,我使用代码示例,
[Chrome v32] 未捕获的TypeError:Object[Object Object]没有方法“set stagereference”