LINUX.ORG.RU

Сообщения abs

 

Подскажите кроссплатформ фреймворк для мобильного приложения

Хочу написать приложение которое берет расписание(я из кпи, у нас есть апи) и на основе этого вырубает звук на парах, включает звук на переменах, после пар. В основном хочу просто потренироваться писать приложения, но таки ситуация когда пропустил звонок из-за беззвука случалась.

Собственно вопрос, а как принято это делать? Для игр я использовал libGDX, но что использовать для приложения? Желательно что-то такое что самое популярное на рынке(чтоб потом помогло при поиске роботы), кроссплатформенное(не С# ибо вообще не знаю, java(приоритет) или C++ подойдет). У меня есть только android и windows phone, но разуется хотелось бы чтоб работало и на айос.

Немного погуглив я так понял что все эти кроссплатформенные фреймворки представляют из себя запущенный веббраузер с одинаковым html/css/js кодом?

Нужен ли мне нативный вид элеметнов? А я не знаю, насколько это ценится в реальной жизни, что требуют работодатели?

 , ,

abs
()

android lifecycle lock screen работает странно

У меня есть отдельный от активити статичный поток который выполняет рисование. При выключении экрана срабатывает метод onPause и я выключаю рисование(чтоб ресурсы батареи не тратились), при включении экрана появляется lock screen, несмотря на это в моем активити срабатывает onResume.

Как мне правильно отловить событие когда мое активити снова становится видно

 

abs
()

Правильно ли я выбрал паттерн

Хочу воспользоваться паттерном состояние. У меня есть стартовый экран в игре(написано как играть, рекорд очков), есть сама игра, есть состояние gameOver из которого можно снова начать играть.

Но я все это сделал без паттернов. И возникает проблема в методе gameOver - в этом методе я удаляю все объекты, и вызываю метод newGame в котором создаю их заново. Проблема в том что в этот момент игра падала(так как происходило обращение к объектам которые я удалил), и мне пришлось метод gameOver вынести в самый конец цикла обновлений.

Чтоб избежать такой ситуации в будущем я хочу 1) применить паттерн состояние. 2) сделать метод changeState(State newState), в котором делать какие-то действия не сразу, а когда завершится кадр. То есть я в любом месте пишу changeState(State.GameOver); А в конце кадра. applyStateChange()

 

abs
()

Как возводить любые числа в любые степеня в уме.

сабж

 

abs
()

Программа для просчета токов на резисторе под линукс

Много заданий по теории электроцепей, хочу прогу чтоб проверять правильность решения. Схемы простые, в плане что только резисторы, постоянный ток. Есть источники напряжение, источники тока.

 

abs
()

Android UIL плохо работает

Загружаю 10 картинок из интернета, использую universal image loader(UIL) для кеширования. Эти 10 картинок в списке, проблема в том что при скроллинге сначала они подгружаются через секунду примерно, а дальше и вовсе секунд через 5-10. Вот код адаптера

@Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.video_preview_item, parent, false);

        TextView textView = (TextView) rowView.findViewById(R.id.textView);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView);

        final FrameLayout frameLayout = (FrameLayout) rowView.findViewById(R.id.frameLayout);
        frameLayout.getLayoutParams().height = (int) (values[position].imageHeight * 0.8f);
        

        
        DisplayImageOptions options = new DisplayImageOptions.Builder().
                cacheOnDisk(true).
                cacheInMemory(false).
                delayBeforeLoading(0).
                bitmapConfig(Bitmap.Config.RGB_565).
                resetViewBeforeLoading(false).
                postProcessor(new BitmapProcessor() {
                    @Override
                    public Bitmap process(Bitmap bmp) {
                        int width = context.getResources().getDisplayMetrics().widthPixels;
                        int height = width*bmp.getHeight()/bmp.getWidth();
                        return Bitmap.createScaledBitmap(bmp, width, height, false);
                    }
                }).
                build();
        
        if(position + 1 != values.length) {   // Это попытка загружать следующею картинку, эффекта не принесло 
            ImageLoader.getInstance().loadImage(values[position+1].imageUrl, options, new SimpleImageLoadingListener() {
                        @Override
                        public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                            // Do whatever you want with Bitmap
                        }
                    });
        }

        ImageLoader.getInstance().displayImage(values[position].imageUrl, imageView, options , new ImageLoadingListener() {
                    @Override
                    public void onLoadingStarted(String imageUri, View view) {
                        //...
                    }
                    @Override
                    public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                        //...
                    }
                    @Override
                    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

                        int clientWidth = context.getResources().getDisplayMetrics().widthPixels;
                        int calHeight = loadedImage.getHeight() * clientWidth/loadedImage.getWidth();
                        values[position].imageHeight = calHeight;
                        frameLayout.getLayoutParams().height = (int) (values[position].imageHeight * 0.8f);
                        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) view.getLayoutParams();
                        params.height = values[position].imageHeight;
                        //((FrameLayout.LayoutParams) view.getLayoutParams()).setMargins(40,0,0,0);
                        //params.setMargins(0, 0, 0, 0);
                        //Log.e("what", "")
                    }
                    @Override
                    public void onLoadingCancelled(String imageUri, View view) {
                        //...
                    }
                }
        );
        

        textView.setText(values[position].clipName);


        return rowView;
    }

 

abs
()

Очень странное поведение listView

Я пытаюсь сделать паралакс эффект, и наконец я его вроде сделал, проблема в том что он работает для верхних элементов, а для нижних(чем ниже тем хуже) не работает. Вот код

listView.setOnScrollListener(new AbsListView.OnScrollListener() {

            //int lastTop = 0;
            HashMap<Integer, Integer> lastBottom = new HashMap<Integer, Integer>();
            int SIZE = 400;

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {

//
                int pos = view.getFirstVisiblePosition();
                Log.e("what", "first visible position :" + pos + " visibleItemCount :" + visibleItemCount);  // На нижних элементах это работает. 

                for(int i = pos; i < pos+visibleItemCount; i++){
                    View child = view.getChildAt(i);
                    if(child != null) {
                        int bottom = SIZE - child.getBottom();
                        if(lastBottom.get(i) == null){ lastBottom.put(i, 0); }
                        if (lastBottom.get(i) != bottom) {
                            TextView textView = (TextView) child.findViewById(R.id.textView);
                            ImageView imageView = (ImageView) child.findViewById(R.id.imageView);
                            textView.setText("bottom : " + bottom); // На нижних элементах текст не обновляется.
                            FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) textView.getLayoutParams();
                            

                            FrameLayout.LayoutParams params1 = (FrameLayout.LayoutParams) imageView.getLayoutParams();
                            params1.setMargins(0,0,0, -bottom / 10);
                            imageView.setLayoutParams(params1);


                            lastBottom.put(i, bottom);
                        }
                    }
                }
            }

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

            }
        });

Элементов 10, каждый элемент представляет собой такое

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout"
    android:layout_width="match_parent"
    android:layout_height="300px">



    <ImageView
        android:layout_width="match_parent"
        android:layout_height="600px"
        android:layout_gravity="bottom"
        android:id="@+id/imageView" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:layout_gravity="bottom"
        android:textSize="30sp"
        android:textColor="#fff"
        android:paddingTop="30sp"
        android:background="@drawable/gradient"
        android:id="@+id/textView" />
</FrameLayout>

 

abs
()

Как обновить view в listView

Если при создании(в адаптере) написать следующее

((FrameLayout.LayoutParams) textView.getLayoutParams()).setMargins(40,0,0,0);
Работает.(У текста отступ в 40 пикселей слева). Я хочу сделать паралакс эффект при скроллинге. И создается такое впечатление что view не хочет применять параметры которые я ему ставлю(

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {
///////// something code/////////

                    TextView textView = (TextView) firstChild.findViewById(R.id.textView);
                    textView.setText("" + topY / 2); // Это работает, таким образом я убедился что пытаюсь добавить отступ нужному textView

                    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) textView.getLayoutParams();
                    params.setMargins(topY / 2, 0, 0, 0);
                    firstChild.invalidate(); // Не работает(firstChild это "родитель" textView )
                    textView.invalidate();   // Не работает

 

abs
()

Странная утечка памяти ,Android

Хочу сделать паралакс эффект, пытаюсь таким кодом

listView.setOnScrollListener(new AbsListView.OnScrollListener() {
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                                 int visibleItemCount, int totalItemCount) {

                int pos = view.getFirstVisiblePosition();
                View firstChild = view.getChildAt(pos);
                if (firstChild != null) {
                    topY = firstChild.getTop();
                    TextView textView = (TextView) firstChild.findViewById(R.id.textView);
                    ImageView imageView = (ImageView) firstChild.findViewById(R.id.imageView);
                    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) imageView.getLayoutParams();
                    params.setMargins(0, -topY / 2, 0, 0);
                    imageView.setLayoutParams(params); // ВОТ ТУТ УТЕЧКА, Коментируем строчку - утечки нет. 
                }
Утечка просто жуткая, по мегабайту за секунду, доходит до 16 мегабайт и приложение падает. В чем тут проблема, или какие есть другие способы реализовать параллакс?

 ,

abs
()

как быстро разобраться с UI под Android

Хочу сделать казалось бы банальную вещь, список с картинками, поверх картинки текст. Создал свой собственный адаптер, и застрял на попытки создать layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:src="@drawable/image"
        android:id="@+id/imageView"
         />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="New Text"
        android:layout_alignBottom="@id/imageView"
        android:gravity="bottom"
        android:id="@+id/textView" />
</RelativeLayout>

Я хотел чтоб ширина картинки была равна ширине экрана, а высота картинки вычислялась пропорционально. Для самой картинки это сработало, но вот размер RelativeLayout почему-то раза в 2 выше. Где есть описание как всем этим пользоваться?

 ,

abs
()

Пытаюсь учить паттерны, подскажите какой использовать

В общем читаю я http://gameprogrammingpatterns.com Вроде все вещи и понятные, только совсем не ясно где все это применять, я уж было расстроился, как вдруг сегодня осознал что таки мне паттерн нужен в игре которую я пишу, идея следующая.

Вы управляете шариком на экране, есть два варианта управления,

стрелочки клавиатуры придают шарику ускорение по соответствующим осям координат. 
стрелочки клавиатуры заставляют шарик ускорятся или замедлятся, поворачивать в ту или иную сторону

Как мне реализовать это? В голову приходит что-то типа создать один общий класс контроля, от него отнаследовать два с нужным мне поведением, а дальше у меня проблемка, что с этими классами делать? Да и что им передавать? Массив нажатых клавишь? Или при нажатии каждой клавиши передавать её?

 ,

abs
()

openGL кеширует вызовы? Или как профилировать

Пишу на libGDX, некоторые люди жалуется на просадку ФПС, начал профилировать, но вот вопрос, а опенГЛ на самом деле все рисует когда происходит вызов методов или он все запоминает,а рисовать будет в конце кадра и ориентироваться на это время нельзя? Собственно с виду все похоже на то что он рисует сразу по месту

 ,

abs
()

Подскажите систему отслеживания ошибок для одного

Работаю один, над относительно небольшим проектом, но уже начинаю замечать что забываю найденные мелкие баги. Хотелось бы программу в которую я мог бы добавлять баги в одну «колонку», а после исправления перемешать их в колонку исправленных. Идеальным бы решением было бы что-то онлайн. С другой стороны если есть какой-то общепринятый корпоративный стандарт который мне придется потом учить в будущем можно заюзать и это.

Я немного погуглил это, там были относительно громоздкие системы где при оформлении бага нужно указывать кто нашел, как воспроизвести, кратное описание. Дальше один из программистов выбирал его себе на рассмотрение, исправлял и отдавал обратно тестировщикам. Мне же это все излишне(ну может как воспроизвести будет нужно).

UPD баги вида «исправить ошибку в слове там-то и там», «почему то поехал текст на пару пикселей вверху».

 , ,

abs
()

java, не упустить дебажный участок кода

Иногда я пишу участок кода который позволяет удобней тестировать(например, игра тетрис, падает 40 блоков - показывается меню, мне лень ждать 40 - поставил 1), таких мест может быть много, сейчас я помечаю их TODO, но даже про TODO можно банально забыть. Как поступать в таких ситуациях?

Вот такой вариант будет хорошим?

public class GlobalVars{
static final boolean DEBUG = true;
}

А во всем другом коде помешать это все в

if(GlobalVars.DEBUG){
// никогда не должно попадать в релиз
}else{
// стандартная логика
}

Блин, ребят, новая проблема всплыла,а как это в коде то все красиво сделать? Сейчас так

if(balls.size > 15) { // TODO not 15 must be MAX_BALL
                        state = State.GAME_OVER;
                        Animation.add("gameOverBlack", 1, 0.4f, 700, new Animation.Sin());
                        Animation.add("gameOverOpacity", 0, 0.85f, 700, new Animation.Sin());
                        //Animation.add("gameOverBlack", 1, 0.4f, 600, new Animation.Linear());
                        //Animation.add("gameOverOpac", 1, 0.4f, 1);
                    }

А дальше появилось несколько вариантов, самый короткий но сложный

if(  (balls.size > 15 && GlobalVars.DEBUG) || balls.size > MAX_BALL )
Можно вообще обобщить 
if( (debug_condition && GlobalVars.DEBUG) || release_condition) 

Или же

if(GlobalVars.DEBUG){
  if(debug_condition){
    // несколько строк, скорее всего одинаковых с нижними
  }else
    // несколько строк... одинаковых...
  }
}else{
  if(release_condition){
    // несколько строк, скорее всего одинаковых с нижними
  }else
    // несколько строк... одинаковых...
  }
}

 , ,

abs
()

libGDX, static field game in AbstractGame

Код который я видел раньше в примерах заключался в том чтоб при создании любого экрана передать в него переменную на «главный» класс Game;

Если из одно экрана нужно было установить другой то это производилось примерно так

game.setScreen(new AnotherScreen(game, something else...)); 

Я попробовал наследовать каждый экран от своего AbstractScreen, в которое добавил статическое поле game; И при старте игры в самом классе Game сделал

AbstractScreen.game = this; 

Это все работает, выглядит очень лаконично и красиво, но в чем кроется проблема? Почему так никто не делает?

 ,

abs
()

netty через блютуз, android

Пробую добавить в свою игру мультиплеер, сейчас сделал так чтоб запускался сервер в сети, другой телефон к нему подключается. Теоретически достаточно подключится к одну и тому же роутеру по Wi-Fi чтоб поиграть. Но хотелось бы сделать возможность играть через блютуз. Что-то серверное я пишу второй раз в жизни и опыта у меня маловато, а по netty в гугле инфы тоже мало. Скажите это вообще возможно то что я хочу, и если да то в какую сторону копать?

 , ,

abs
()

Qt обработка звука

Помните мою прогу LsdDraw ? Хочу добавить туда некую зависимость от звука, как со звуком работать в Qt? Желательно получить поток который сейчас проигрывается в системе (пользуюсь pulseAudio) но если реалтаймово не получится то можно и просто сделать предобработку звука. Но как? Я в этом мало что смыслю. Может кто писал на Qt что-то похожее, поделитесь опытом и/или исходниками.

 , ,

abs
()

Придумал концепт, не понимаю почему такого нет

Я пишу на libGDX, и это очень маленький фреймоворк в котором по минимум нужного функционала. И я задумался, а почему там мало функционала? Чтоб получить маленький размер apk? Ну ок, а разве нельзя системой сборки пройтись и посмотреть какие методы используются, а какие нет и собрать только нужные файлы?

А теперь конкретный пример после которого я решил это написать. В libGDX есть Color, можно задать в некоторых форматах типа argb8888,rgba8888 и так далее. Но нет hsv, с одной стороны оно и не нужно, а с другой читайте текст выше. Хуже от этого точно никому не станет.

 , ,

abs
()

На чем писать сервер для игры

У меня есть синглплеер андроид игра(играть против ботов) в которую было бы интересно добавить возможность или онлайн игры на большой карте, или просто друг против друга где сейчас игра с ботом. На чем собственно принято сейчас писать сервер? На роботе где я устроился на испытательный срок используется на клиенте netty, но он на джаве и я не уверен что это то что нужно. Из языков которые знаю это С++, джава. Пробовал делать сервер на node.js. Собирался учить пайтон.

Требований к серверу особых нету, желательно только чтоб можно было найти недорогой хостинг потом куда это все поставить.

 ,

abs
()

В джаве слишком много преобразований double->float , float->double ?

Раньше когда я говнокодил то по привычке писал float для всех чисел для которых не нужна точность, но потом получалось так что большинство параметров требуют передачи float, а большинство функций возвращают double вместо float, та даже банальная запись дробного числа это дабл. Но вот читаю я сейчас чужой код с которым мне нужно работать и вижу там следующие

bullet.setInertion((float)Math.sin(angle), (float)Math.cos(angle), 0, 0);

Собственно это нормальная штатная ситуация, или же так делать не принято? Тогда какое решение? Вот хоть с данным куском кода, гуглил когда-то Math для фтоатов, нет такого. Переписать класс bullet чтоб он принимал и работал внутри с даблом? А насколько сильно это скажется на производительности?

 ,

abs
()

RSS подписка на новые темы