使用产品 :imobile1001
设备:小米10pro Android 10
模型格式:OSGB
问题描述:这个月刚更换的1001版本 ,之前用的是9.11,现在打开模型后经常在滑动过程中出现卡顿 卡死 闪退;有没有supermap iearth的代码
重现步骤:1 打开模型 2 手势滑动。
下图为错误发生时的日志
1001的lib包
刚刚换成9d版本也会出现这样的问题,模型会卡在那里自己放大缩小,放大缩小,缩放幅度不大,但是一会儿就闪退了。
这是我手势处理的代码。
switch (event.getAction() & MotionEvent.ACTION_MASK) { //// case MotionEvent.ACTION_UP: //// Layer3Ds layer3ds = m_sceneControl.getScene().getLayers(); //// int count = layer3ds.getCount(); //// if(firstOpen){ //// for (int i = 0; i < count; i++) { //// ((Layer3DOSGBFile) layer3ds.get(i)).setLODRangeScale(0.1); //// } //// } //// for (int i = 0; i < count; i++) { //// Layer3D layer = layer3ds.get(i); //// if (layer == null) { //// continue; //// } //// final Selection3D selection = layer.getSelection(); //// if (selection == null) { //// continue; //// } //// if (layer.getName() == null) { //// continue; //// } //// FieldInfos fieldInfos = layer.getFieldInfos(); //// vect(selection, layer, fieldInfos); //// // 获取选择集中对象的总数 //// if (selection.getCount() > 0) { //// // 返回选择集中指定几何对象的系统 ID // 本地数据获取 //// int layerId = -1; //// try{ //// layerId = layersMap.get(layer.getName()); //// }catch (Exception e){ //// showToast("未在图层列表中找到该构件"); //// return false; //// } //// if(viewPagerDialog == null){ //// viewPagerDialog = ViewPagerDialog.getInstance(getActivity(), 0, String.valueOf(layerId), SmID, qualitylist, safetylist, cmptFilesList); //// }else{ //// if(!TextUtils.isEmpty(String.valueOf(layerId)) && !TextUtils.isEmpty(SmID)){ //// viewPagerDialog.setLayerId(String.valueOf(layerId)); //// viewPagerDialog.setSmID(SmID); //// }else{ //// return false; //// } //// } //// viewPagerDialog.show(); //// } //// } //// //// break; //// case MotionEvent.ACTION_DOWN: //// Layer3Ds layer3ds1 = m_sceneControl.getScene().getLayers(); //// int count1 = layer3ds1.getCount(); //// for (int i = 0; i < count1; i++) { //// Layer3D layer = layer3ds1.get(i); //// Selection3D selection = layer.getSelection(); //// selection.clear(); //// } //// break; //// default: //// break; //// } // return false;
我把代码替换成demo中的touch事件,只要底部弹出框弹出一次,以后的每次滑动事件弹出框都会弹出。
换成这个touch事件后,还是在滑动时有卡顿甚至崩溃。
ps:在应用商店上架的supermap iearth不会出现这些问题。那个的代码能发一下吗?
如果把selection每次清空,则不会标注哪个控件。
以下是事件处理
// 通过touch监听获取点击事件 class SceneTouchListener implements View.OnTouchListener { @Override public boolean onTouch(View v, final MotionEvent event) { Layer3Ds layer3ds = m_sceneControl.getScene().getLayers(); // 返回给定的三维图层集合中三维图层对象的总数。 int count = layer3ds.getCount(); if (count > 0) { for (int i = 0; i < count; i++) { Layer3D layer = layer3ds.get(i); // 遍历count之后,得到三维图层对象 // 返回三维图层的选择集。 if (layer == null) { continue; } selection = layer.getSelection(); if (selection == null) { continue; } if (layer.getName() == null) { continue; } // 获取选择集中对象的总数 if (selection.getCount() > 0) { // 返回选择集中指定几何对象的系统 ID // 本地数据获取 queryInfoBubblePopupWindow.m_QueryInfoData.clear(); handler.post(new Runnable() { @Override public void run() { queryInfoBubblePopupWindow.show(m_sceneControl, event.getX(), event.getY()); } }); } FieldInfos fieldInfos = layer.getFieldInfos(); vect(selection, layer, fieldInfos, queryInfoBubblePopupWindow); } } return false; }
可能是在滑动的时候造成你的touch事件一直在执行,导致内存泄漏崩掉。你可以尝试设置用户手势识别器, setGestureDetector(android.view.GestureDetector gsDetector),通过里面的长按事件或者ondown事件来执行属性的查询。您的这个情况就是代码逻辑上的问题,可以调试一下代码看是卡在哪个位置,是不是每次滑动都会执行你的事件。不好意思,iearth的代码目前没有开源,没法发给您
您好,非常感谢您积极帮我解决问题。
现在我遇到了一个新的问题:
工具: imobile1001
对比操作工具: 华为m5(Android 9) 小米10 pro(Android 10) 华为p30 pro(Android 10)
问题描述:更换osgb模型,全部加载s3m的模型,在使用相同的代码情况下,华为m5、小米10 pro和华为p30 pro点击事件无效,无变色、无反应。
以下为代码片段
// 通过touch监听获取点击事件 class SceneTouchListener implements View.OnTouchListener { @Override public boolean onTouch(View v, final MotionEvent event) { switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_UP: Layer3Ds layer3ds = m_sceneControl.getScene().getLayers(); int count = layer3ds.getCount(); // if(firstOpen){ // for (int i = 0; i < count; i++) { // ((Layer3DOSGBFile) layer3ds.get(i)).setLODRangeScale(0.1); // } // } for (int i = 0; i < count; i++) { Layer3D layer = layer3ds.get(i); if (layer == null) { continue; } final Selection3D selection = layer.getSelection(); if (selection == null) { continue; } if (layer.getName() == null) { continue; } FieldInfos fieldInfos = layer.getFieldInfos(); vect(selection, layer, fieldInfos); // 获取选择集中对象的总数 if (selection.getCount() > 0) { // 返回选择集中指定几何对象的系统 ID // 本地数据获取 int layerId = -1; try{ layerId = layersMap.get(layer.getName()); }catch (Exception e){ showToast("未在图层列表中找到该构件"); return false; } if(viewPagerDialog == null){ viewPagerDialog = ViewPagerDialog.getInstance(getActivity(), 0, String.valueOf(layerId), SmID, qualitylist, safetylist, cmptFilesList); }else{ if(!TextUtils.isEmpty(String.valueOf(layerId)) && !TextUtils.isEmpty(SmID)){ viewPagerDialog.setLayerId(String.valueOf(layerId)); viewPagerDialog.setSmID(SmID); }else{ return false; } } viewPagerDialog.show(); } } break; case MotionEvent.ACTION_DOWN: Layer3Ds layer3ds1 = m_sceneControl.getScene().getLayers(); int count1 = layer3ds1.getCount(); for (int i = 0; i < count1; i++) { Layer3D layer = layer3ds1.get(i); Selection3D selection = layer.getSelection(); selection.clear(); } break; default: break; } return false; }