提交 42c71aae 作者: cbd

1、布局中使用GlSufaceView支持触摸缩放。

2、放入ScrowView触摸冲突处理。
上级 e891180d
......@@ -52,8 +52,8 @@ public class ModelRenderer implements GLSurfaceView.Renderer {
// Add 0.5f to the alpha component to the global shader so we can see through the skin
private static final float[] BLENDING_MASK_FORCED = {1.0f, 1.0f, 1.0f, 0.5f};
private final float[] backgroundColor;
private final SceneLoader scene;
float[] backgroundColor;
SceneLoader scene;
private final List<EventListener> listeners = new ArrayList<>();
......@@ -70,7 +70,7 @@ public class ModelRenderer implements GLSurfaceView.Renderer {
/**
* Drawer factory to get right renderer/shader based on object attributes
*/
private final RendererFactory drawer;
private RendererFactory drawer;
// frames per second
private long framesPerSecondTime = -1;
......@@ -197,6 +197,27 @@ public class ModelRenderer implements GLSurfaceView.Renderer {
}
}
public ModelRenderer(Activity parent, ModelSurfaceView modelSurfaceView){
this.main = modelSurfaceView;
try {
this.drawer = new RendererFactory(parent);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
if (doShadowing) {
try {
this.shadowsRenderer = new ShadowsRenderer(parent);
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
public ModelRenderer addListener(EventListener listener) {
this.listeners.add(listener);
return this;
......@@ -973,4 +994,8 @@ public class ModelRenderer implements GLSurfaceView.Renderer {
public void setOrientation(Quaternion orientation) {
this.orientation = orientation;
}
public void setScene(SceneLoader scene) {
this.scene = scene;
}
}
\ No newline at end of file
......@@ -15,6 +15,7 @@ import org.the3deer.util.android.AndroidUtils;
import org.the3deer.util.event.EventListener;
import org.the3deer.util.math.Quaternion;
import java.io.IOException;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;
......@@ -28,8 +29,10 @@ import java.util.List;
public class ModelSurfaceView extends GLSurfaceView implements EventListener {
private ModelRenderer mRenderer;
private float[] backgroundColor = new float[]{0.0f, 0.5f, 0.0f, 1.0f};
SceneLoader scene;
private final List<EventListener> listeners = new ArrayList<>();
private boolean canTouch =false;
public ModelSurfaceView(Activity parent, float[] backgroundColor, SceneLoader scene){
super(parent);
......@@ -51,10 +54,13 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener {
}
public ModelSurfaceView(Context context, AttributeSet attrs) {
public ModelSurfaceView(Context context, AttributeSet attrs) throws IOException, IllegalAccessException {
super(context, attrs);
Log.i("ModelSurfaceView","Loading [OpenGL 2] ModelSurfaceView...........");
setEGLContextClientVersion(2);
mRenderer = new ModelRenderer((Activity) context, this);
mRenderer.addListener(this);
setRenderer(mRenderer);
}
public void addListener(EventListener listener){
......@@ -69,9 +75,20 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener {
return mRenderer.getViewMatrix();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
// propagate event to responsible...
//NestedScrollView嵌套ModelSurfaceView,ModelSurfaceView触摸事件冲突
if (canTouch){
if(event.getAction() == MotionEvent.ACTION_DOWN){
getParent().requestDisallowInterceptTouchEvent(true);
}
if(event.getAction() == MotionEvent.ACTION_MOVE){
//通知他的父View NestedScrollView现在进行的是本控件的操作,不要对我的操作进行干扰
getParent().requestDisallowInterceptTouchEvent(true);
}
}
AndroidUtils.fireEvent(listeners, new EventObject(event));
return true;
}
......@@ -87,6 +104,19 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener {
return true;
}
public void setCanTouch(boolean canTouch) {
this.canTouch=canTouch;
}
public void setBackgroundColor(float[] backgroundColor) {
mRenderer.backgroundColor = backgroundColor;
}
public void setScene(SceneLoader scene) {
mRenderer.scene = scene;
}
public void toggleProjection() {
Log.i("ModelSurfaceView","Toggling projection...");
mRenderer.toggleProjection();
......@@ -148,4 +178,6 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener {
public void setOrientation(Quaternion orientation) {
mRenderer.setOrientation(orientation);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论