Задать вопрос
  • Почему Dialog отображается как будто с Gravity.TOP, а необходимо по центру?

    @Sekorashka Автор вопроса
    В общем решение получилось достаточно криворуким, но таки решением.

    Все на самом деле просто. Делаем dialog в DialogFragment из onCreateView():
    1) Задаем layout с imageView как фон, блюрим скриншот экрана и вставляем фоном в imageView
    2) Создаем любой alertDialog и показываем его, не забудьте на кнопки в диалоге поставить закрытие фрагмента, чтобы закрылся весь диалог, иначе фон останется
    3) Затем вызываем диалог как обычный фрагмент, но в качестве контейнера подаем весь экран.

    Проблемы:
    1) чисто блюровская проблема с поворотом экрана - не сделать скриншот, во время поворота - не из чего(для меня не проблема - многие приложения жестко привязаны к ориентации)
    2) мое незнание - как взять в качестве контейнера view вместе с actionBarом - про android.R.id.content знаю, но он берет только сам контейнер не включая actionbar + расстановка id для view(просто никогда не занимался этим)
    предполагаю как то можно объединить android.R.id.content c android.R.id.action_bar_container и его дополнительными кнопками, но не знаю как, может кто поможет?

    кому интересно код ниже:

    DialogFragment(c парой костылей, связанных как раз с проблемой взятия экрана activity):

    public class CustomAlertDialog extends DialogFragment implements  DialogInterface.OnClickListener {
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    
            View rootView = inflater.inflate(R.layout.alert_custom_dialog, container, false);
    		ImageView background = (ImageView) rootView.findViewById(R.id.image);
            Rect frame = new Rect();
            getActivity().getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
            int statusBarHeight = frame.top;
            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                    FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
            params.setMargins(0, statusBarHeight, 0, 0);
            background.setLayoutParams(params);
            Bitmap map=takeScreenShot(getActivity());
            Bitmap fast= FastBlur.doBlur(map, 10, true);
            final Drawable draw=new BitmapDrawable(getActivity().getResources(),fast);
            background.setImageDrawable(draw);
            AlertDialog.Builder adb = new AlertDialog.Builder(getActivity())
                    .setPositiveButton("yes", this)
                    .setNegativeButton("no", this);
            LayoutInflater dialogInflater = getActivity().getLayoutInflater();
            adb.setView(dialogInflater.inflate(R.layout.slider_item, null)).show();
            return rootView;
        }
    
        private static Bitmap takeScreenShot(Activity activity)
        {
            View view = activity.getWindow().getDecorView();
            view.setDrawingCacheEnabled(true);
            view.buildDrawingCache();
            Bitmap b1 = view.getDrawingCache();
            Rect frame = new Rect();
            activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
            int statusBarHeight = frame.top;
            int width = activity.getWindowManager().getDefaultDisplay().getWidth();
            int height = activity.getWindowManager().getDefaultDisplay().getHeight();
    
            Bitmap b = Bitmap.createBitmap(b1, 0, statusBarHeight, width, height  - statusBarHeight);
            view.setDrawingCacheEnabled(false);
            return b;
        }
    
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
            getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit();
        }
    }


    ну и вызов из другого фрагмента(может как раз тут подскажите как взять весь экран с actionbarом?)

    public void showDialogFragment() {
            View v = getActivity().getWindow().getDecorView();
            v.setId(1);
            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
            DialogFragment newFragment = new CustomAlertDialog();
                FragmentTransaction transaction = fragmentManager.beginTransaction();
                transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                transaction.add(1, newFragment)
                        .addToBackStack(null).commit();
        }


    xml та же

    и да картинка для привлечения внимания)
    6cf21919baca46b18cc05f3dbd07b5ff.png
    Ответ написан
    Комментировать
  • Как показать карту парка из изображения с интерактивными элементами?

    @Sekorashka Автор вопроса
    Пробовал разобраться с OSM - разобрался, нарезал карту наиболее подходящую для парка из карт MOBACa, установил маркеры... но все равно результат естественно не устроил, ибо в голове дизайнера было другое.

    Поискав библиотеки для отображения картинок нашел отличный вариант
    https://github.com/moagrius/TileView
    С подробным описанием и открытым исходным кодом, есть возможность даже геопривязку сделать. в итоге воспользовался ее... если кому необходимо - могу расписать подробнее уроком как, но я думаю ни у кого не будет проблем разобрать простейший пример:
    https://github.com/moagrius/TileView/wiki/Detailed...
    Ответ написан
    1 комментарий