Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Multiple Custom marker layout Viewrendering issue #81

Open
ChetnaNakum opened this issue Jan 31, 2019 · 1 comment
Open

Multiple Custom marker layout Viewrendering issue #81

ChetnaNakum opened this issue Jan 31, 2019 · 1 comment

Comments

@ChetnaNakum
Copy link

ChetnaNakum commented Jan 31, 2019

The LocationMarker's setRenderEvent block calls after a long time When i add my custom layout ( too many UI components are available in layout ) using CompletableFuture and CompletableFuture.allOf(exampleLayout). So, it creates positioning issue in rendered Locationmarkers.
Please let me know how can overcome with this issue.

Here is my code:

<
for (int i = 0; i < listApi.size() ; i++) {

            CompletableFuture<ViewRenderable> exampleLayout;

            if (listApi.get(i).getType().toLowerCase().equalsIgnoreCase("lenses")) {
                //inflate lenses layout
                exampleLayout =
                        ViewRenderable.builder()
                                .setView(getApplicationContext(), R.layout.layout_pin_lense)
                                .build();
            } else {
                //inflate other pin layout
                exampleLayout =
                        ViewRenderable.builder()
                                .setView(getApplicationContext(), R.layout.layout_pin)
                                .build();

            }

            // When you build a Renderable, Sceneform loads its resources in the background while returning
            // a CompletableFuture. Call thenAccept(), handle(), or check isDone() before calling get().
         

            int index = i;

         
            CompletableFuture.allOf(exampleLayout)
                    .handle((notUsed, throwable) -> {
                        int finalI1 = (index >= listApi.size()) ? -1 : index;

                        if (finalI1 < 0) return null;


                       

                        // When you build a Renderable, Sceneform loads its resources in the background while
                        // returning a CompletableFuture. Call handle(), thenAccept(), or check isDone()
                        // before calling get().

                        if (throwable != null) {
                            DemoUtils.displayError(getApplicationContext(), "Unable to load renderables", throwable);
                            return null;
                        }

                        try {
                                                         
                            ViewRenderable eView = exampleLayout.get();

                            Node base = new Node();
                            base.setRenderable(eView);
                            //Context c = this;
                            // Add  listeners etc here

                            /*eView.getView().setOnTouchListener((v, event) -> {
                                Toast.makeText(
                                        getApplicationContext(), "Location marker touched.", Toast.LENGTH_LONG)
                                        .show();
                                return false;
                            });*/

                            eView.getView().setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    //CommonUtils.makeToast(listToSet.get(finalI1).getPlaceName(), DashBoardMainActivity.this);
                                    //showAlertDialogPinDetail(listToSet.get(finalI1));
                                    if (finalI1 < listApi.size()) {
                                        //if type is not lenses then open pin detail
                                        if (!listApi.get(finalI1).getType().toLowerCase().equalsIgnoreCase("lenses")) {
                                            showAlertDialogPinDetail(listApi.get(finalI1), finalI1);
                                        }
                                    }

                                }
                            });

                            LocationMarker layoutLocationMarker = new LocationMarker(
                                    Double.parseDouble(listApi.get(finalI1).getLongitude()),
                                    Double.parseDouble(listApi.get(finalI1).getLattitude()),
                                    base
                            );


                            // An example "onRender" event, called every frame
                            // Updates the layout with the markers distance

                            layoutLocationMarker.setRenderEvent(node -> {

                                try {

                                    System.out.println("Position inner child @@@@@@@@@@@ " + finalI1);

                                    View eView1 = eView.getView();


                                    if (listApi.get(finalI1).getType().toLowerCase().equalsIgnoreCase("lenses")) {
                                        //lenses design

                                        CircleImageView imgUser = eView1.findViewById(R.id.imgUser);
                                        LinearLayout llMain = eView1.findViewById(R.id.llMain);
                                        TextView tvUsername = eView1.findViewById(R.id.tvUsername);
                                        TextView tvMsg = eView1.findViewById(R.id.tvMsg);
                                        TextView tvWebsite = eView1.findViewById(R.id.tvWebsite);
                                        TextView tvStartingDateValue = eView1.findViewById(R.id.tvStartingDateValue);
                                        TextView tvEndDateValue = eView1.findViewById(R.id.tvEndDateValue);


                                        tvUsername.setText(listApi.get(finalI1).getFullname());
                                        tvMsg.setText(listApi.get(finalI1).getMessage());


                                        tvWebsite.setText(listApi.get(finalI1).getWebsite());
                                        //put space
                                        String start_date = listApi.get(finalI1).getStart_date();
                                        if (CommonUtils.isValidString(start_date)) {
                                            tvStartingDateValue.setText(" " + CommonUtils.getConvertedDate("dd/MM/yyyy",
                                                    "dd MMM, yyyy", start_date));
                                        }
                                        //put space
                                        String end_date = listApi.get(finalI1).getEnd_date();
                                        if (CommonUtils.isValidString(end_date)) {
                                            tvEndDateValue.setText(" " + CommonUtils.getConvertedDate("dd/MM/yyyy",
                                                    "dd MMM, yyyy", end_date));
                                        }

                                        //set image
                                        String imageVal = listApi.get(finalI1).getImage();
                                        if (CommonUtils.isValidString(imageVal)) {
                                            if (imageVal.startsWith("http") || imageVal.startsWith("www")) {
                                                //do not append url load it
                                                CommonUtils.setUserImageGlide(DashBoardMainActivity.this, imageVal, imgUser);
                                            } else {
                                                //append image url
                                                CommonUtils.setUserImageGlide(DashBoardMainActivity.this, WebServicesAPI.IMAGE_URL_APPEND + imageVal, imgUser);

                                            }
                                        } else {
                                            CommonUtils.setUserImageGlide(DashBoardMainActivity.this, "", imgUser);
                                        }


                                    } else {


                                        //other pin detail

                                        CircleImageView imgUser = eView1.findViewById(R.id.imgUser);
                                        LinearLayout llMain = eView1.findViewById(R.id.llMain);
                                        TextView tvUsername = eView1.findViewById(R.id.tvUsername);
                                        TextView tvMsg = eView1.findViewById(R.id.tvMsg);
                                        TextView tvTimeDate = eView1.findViewById(R.id.tvTimeDate);
                                        TextView tvLikeNumber = eView1.findViewById(R.id.tvLikeNumber);
                                        TextView tvShareNumber = eView1.findViewById(R.id.tvShareNumber);

                                        if (listApi.get(finalI1).getType().toLowerCase().equalsIgnoreCase("private")) {
                                            //private
                                            llMain.setBackground(CommonUtils.getDrawables(DashBoardMainActivity.this, R.drawable.blue_bubble));

                                        } else if (listApi.get(finalI1).getType().toLowerCase().equalsIgnoreCase("public")) {
                                            //public
                                            llMain.setBackground(CommonUtils.getDrawables(DashBoardMainActivity.this, R.drawable.green_bubble));

                                        }


                                        //set like unlike images
                                        if (listApi.get(finalI1).getMessage_likes().equalsIgnoreCase("0")) {
                                            tvLikeNumber.setCompoundDrawablesWithIntrinsicBounds(CommonUtils.getDrawables(DashBoardMainActivity.this, R.drawable.unlike_big), null, null, null);
                                        } else {
                                            tvLikeNumber.setCompoundDrawablesWithIntrinsicBounds(CommonUtils.getDrawables(DashBoardMainActivity.this, R.drawable.like_big_pin_detail), null, null, null);
                                        }

                                        tvUsername.setText(listApi.get(finalI1).getFullname());
                                        tvMsg.setText(listApi.get(finalI1).getMessage());
                                        tvTimeDate.setText(listApi.get(finalI1).getTime());
                                        tvLikeNumber.setText(listApi.get(finalI1).getLike());
                                        tvShareNumber.setText(listApi.get(finalI1).getReplay());

                                        //set image
                                        String imageVal = listApi.get(finalI1).getImage();
                                        if (CommonUtils.isValidString(imageVal)) {
                                            if (imageVal.startsWith("http") || imageVal.startsWith("www")) {
                                                //do not append url load it
                                                CommonUtils.setUserImageGlide(DashBoardMainActivity.this, imageVal, imgUser);
                                            } else {
                                                //append image url
                                                CommonUtils.setUserImageGlide(DashBoardMainActivity.this, WebServicesAPI.IMAGE_URL_APPEND + imageVal, imgUser);

                                            }
                                        } else {
                                            CommonUtils.setUserImageGlide(DashBoardMainActivity.this, "", imgUser);
                                        }


                                    }


                                } catch (Exception e) {
                                    e.printStackTrace();
                                }


                                /*}*/
                            });


                            // Adding the marker

                            if (!locationScene.mLocationMarkers.contains(layoutLocationMarker)) {
                                locationScene.mLocationMarkers.add(layoutLocationMarker);
                                //locationScene.refreshAnchors();
                            }


                        } catch (Exception ex) {
                            ex.printStackTrace();
                            //DemoUtils.displayError(getApplicationContext(), "Unable to load renderables", ex);
                        }

                        return null;

                    });

            /*//TODO: add ar final
            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    System.out.println("Position Delay @@@@@@@@@@@ " + index);
                }
            }, 5000);*/


        }

Frame frame = ar_scene_view.getArFrame();
//Frame frame = locationScene.mArSceneView.getArFrame();
if (frame == null) {
return;
}

        if (frame.getCamera().getTrackingState() != TrackingState.TRACKING) {
            return;
        }

if (locationScene != null) {
locationScene.processFrame(frame);
}

@ChetnaNakum ChetnaNakum changed the title Marker Custom layout Viewrendering issue Custom marker layout Viewrendering issue Jan 31, 2019
@ChetnaNakum ChetnaNakum changed the title Custom marker layout Viewrendering issue Multiple Custom marker layout Viewrendering issue Jan 31, 2019
@Zhenande
Copy link

Zhenande commented Aug 6, 2019

@Ronakgadhia I have same problem with you. Have you found solution for this issue?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants