提交 42c71aae 作者: cbd

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

2、放入ScrowView触摸冲突处理。
上级 e891180d
...@@ -52,8 +52,8 @@ public class ModelRenderer implements GLSurfaceView.Renderer { ...@@ -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 // 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 static final float[] BLENDING_MASK_FORCED = {1.0f, 1.0f, 1.0f, 0.5f};
private final float[] backgroundColor; float[] backgroundColor;
private final SceneLoader scene; SceneLoader scene;
private final List<EventListener> listeners = new ArrayList<>(); private final List<EventListener> listeners = new ArrayList<>();
...@@ -70,7 +70,7 @@ public class ModelRenderer implements GLSurfaceView.Renderer { ...@@ -70,7 +70,7 @@ public class ModelRenderer implements GLSurfaceView.Renderer {
/** /**
* Drawer factory to get right renderer/shader based on object attributes * Drawer factory to get right renderer/shader based on object attributes
*/ */
private final RendererFactory drawer; private RendererFactory drawer;
// frames per second // frames per second
private long framesPerSecondTime = -1; private long framesPerSecondTime = -1;
...@@ -197,6 +197,27 @@ public class ModelRenderer implements GLSurfaceView.Renderer { ...@@ -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) { public ModelRenderer addListener(EventListener listener) {
this.listeners.add(listener); this.listeners.add(listener);
return this; return this;
...@@ -973,4 +994,8 @@ public class ModelRenderer implements GLSurfaceView.Renderer { ...@@ -973,4 +994,8 @@ public class ModelRenderer implements GLSurfaceView.Renderer {
public void setOrientation(Quaternion orientation) { public void setOrientation(Quaternion orientation) {
this.orientation = 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; ...@@ -15,6 +15,7 @@ import org.the3deer.util.android.AndroidUtils;
import org.the3deer.util.event.EventListener; import org.the3deer.util.event.EventListener;
import org.the3deer.util.math.Quaternion; import org.the3deer.util.math.Quaternion;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.EventObject; import java.util.EventObject;
import java.util.List; import java.util.List;
...@@ -28,8 +29,10 @@ import java.util.List; ...@@ -28,8 +29,10 @@ import java.util.List;
public class ModelSurfaceView extends GLSurfaceView implements EventListener { public class ModelSurfaceView extends GLSurfaceView implements EventListener {
private ModelRenderer mRenderer; 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 final List<EventListener> listeners = new ArrayList<>();
private boolean canTouch =false;
public ModelSurfaceView(Activity parent, float[] backgroundColor, SceneLoader scene){ public ModelSurfaceView(Activity parent, float[] backgroundColor, SceneLoader scene){
super(parent); super(parent);
...@@ -51,10 +54,13 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener { ...@@ -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); super(context, attrs);
Log.i("ModelSurfaceView","Loading [OpenGL 2] ModelSurfaceView..........."); Log.i("ModelSurfaceView","Loading [OpenGL 2] ModelSurfaceView...........");
setEGLContextClientVersion(2); setEGLContextClientVersion(2);
mRenderer = new ModelRenderer((Activity) context, this);
mRenderer.addListener(this);
setRenderer(mRenderer);
} }
public void addListener(EventListener listener){ public void addListener(EventListener listener){
...@@ -69,9 +75,20 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener { ...@@ -69,9 +75,20 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener {
return mRenderer.getViewMatrix(); return mRenderer.getViewMatrix();
} }
@Override @Override
public boolean onTouchEvent(MotionEvent event) { public boolean onTouchEvent(MotionEvent event) {
// propagate event to responsible... // 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)); AndroidUtils.fireEvent(listeners, new EventObject(event));
return true; return true;
} }
...@@ -87,6 +104,19 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener { ...@@ -87,6 +104,19 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener {
return true; 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() { public void toggleProjection() {
Log.i("ModelSurfaceView","Toggling projection..."); Log.i("ModelSurfaceView","Toggling projection...");
mRenderer.toggleProjection(); mRenderer.toggleProjection();
...@@ -148,4 +178,6 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener { ...@@ -148,4 +178,6 @@ public class ModelSurfaceView extends GLSurfaceView implements EventListener {
public void setOrientation(Quaternion orientation) { public void setOrientation(Quaternion orientation) {
mRenderer.setOrientation(orientation); mRenderer.setOrientation(orientation);
} }
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论