1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/wzy901213145499-Tunlview

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

(mValue-startvalue) * mDensity * (mLineDivider); endXPosition = mWidth/2 + (endvalue-mValue) * mDensity * (mLineDivider);

canvas.drawRect(startXPosition,0,endXPosition,mHeight,shadowPaint); }

Мы также должны разобраться в преобразовании между временем и делениями шкалы.

/**

  • Получение значения mvalue, соответствующего времени timestamp

  • @param time временной отрезок time

  • @return / private int getmValue(long time) { /*

    • Начиная с 00:00:00 устанавливаем время / calendar1.set(Calendar.HOUR_OF_DAY, 0); calendar1.set(Calendar.MINUTE, 0); calendar1.set(Calendar.SECOND, 0); long l1 = calendar1.getTimeInMillis(); return (int) (time - l1) / (1000 * valueToSencond); } /*
  • Получение времени, соответствующего значению mValue

  • @param mValue

  • @return */ public static String getTime(float mValue) { // TODO: 2017/10/23 Обработка превышения 24 часов и меньше 0 часов

    int day = (int) (mValue * valueToSencond / (3600 * 24)); // количество дней int hour = (int) ((mValue * valueToSencond - (60 * 60 * 24) * day) / 3600); int minute = (int) (mValue * valueToSencond - 3600 * hour - (60 * 60 * 24) * day) / 60; int second = (int) mValue * valueToSencond - hour * 3600 - minute * 60 - (60 * 60 * 24) * day;

    AXLog.e("wzytest", "hour:" + hour + " minute:" + minute + " second:" + second + " day:" + day); Calendar calendar1 = Calendar.getInstance(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**

    • Начиная с 00:00:00 устанавливаем время */ calendar1.add(Calendar.DATE, day); calendar1.set(Calendar.HOUR_OF_DAY, hour); calendar1.set(Calendar.MINUTE, minute); calendar1.set(Calendar.SECOND, second);

    String moveDate = sdf1.format(calendar1.getTime()); return moveDate; } Когда происходит обработка перемещения и масштабирования пальцем

case MotionEvent.ACTION_MOVE: if (event.getPointerCount() == 1) { mMove = xPosition - mlastX; xMove = (int) (mMove / (mLineDivider * mDensity)); mValue -= xMove; notifyValueChange(); invalidate(); } break;

Также есть сложная проблема, которую нужно решить: при масштабировании, если масштаб становится слишком большим или слишком маленьким, мы должны изменить точность масштаба, чтобы он соответствовал изменениям на странице, иначе текст может перекрываться или страница может выглядеть пустой. Эта обработка довольно сложна, общая идея заключается в том, что интервал между делениями будет изменяться в соответствии с масштабированием пальца, и когда масштаб станет слишком большим или слишком малым, мы изменим точность масштаба.

else if (event.getPointerCount() == 2) { // Два пальца находятся на экране и перемещаются, это состояние масштабирования centerPointBetweenFingers(event); double fingerDis = distanceBetweenFingers(event);

                if (fingerDis > lastFingerDis) {
                    currentStatus = STATUS_ZOOM_OUT;
                } else {
                    currentStatus = STATUS_ZOOM_IN;
    }

    if(Mode==Mode_0&&currentStatus==STATUS_ZOOM_OUT||Mode==Mode_4&&currentStatus==STATUS_ZOOM_IN){
            AXLog.e("wzytest","Mode_0 при увеличении и Mode_4 при уменьшении не обрабатываются");
        }else{
            scaledRatio = (float) (fingerDis / lastFingerDis  );
            shadowPaint.setStrokeWidth(6*scaledRatio);
            mLineDivider =  lastItemDivider * scaledRatio; //расстояние после масштабирования одного деления на экране
        }

        if(currentStatus==STATUS_ZOOM_IN&&Mode==Mode_0){
            if(2*mLineDivider<LINE_DIVIDER){
                // Сброс, изменение режима шкалы
                mLineDivider = 2;
                lastItemDivider = 2;
                useString = timeString1;
                Mode = Mode_1;
                valueToSencond = 2*valueToSencond;
                AXLog.e("wzytest","mvalue:"+mValue);
                //Получить текущее значение заново
                mValue = getNowValue();
                //Пересчитать синюю временную шкалу видео
                initData();
            }
        }else if(currentStatus==STATUS_ZOOM_IN&&Mode==Mode_1){
            if(3*mLineDivider<LINE_DIVIDER){
                // Сброс, изменение режима шкалы

В этом тексте присутствуют фрагменты кода, но они не содержат ошибок и выглядят как фрагменты рабочего кода. valueToSencond = valueToSencond/2;
                            //重新获取当前value
                            mValue = getNowValue();
                            //重新计算蓝色录像时间轴
                            initData();
                        }
                    }

                    AXLog.e("wzytest","itemDivider:"+mLineDivider+" lastItemDivider:"+lastItemDivider);
                    postInvalidate();
                }

Данная часть кода является достаточно сложной, рекомендуется заинтересованным читателям скачать исходный код для исследования.

## Три, прочие связанные моменты
Автор запустил асинхронный поток, который с интервалом в одну секунду увеличивает время записываемого файла на одну секунду. Цель этого действия — имитировать процесс записи и обеспечить движение синей области в соответствии с течением времени.

## Четыре, заключение
При столкновении со сложными проблемами следует тщательно анализировать их суть, разбивать проблему на более мелкие части и постепенно решать их. Как говорится, путь в тысячу ли начинается с первого шага, а большие реки начинаются с маленьких ручьёв.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Идеальное средство управления воспроизведением видео (линейка), которое позволяет сопоставить элемент управления со временем, а также перемещать и масштабировать элемент управления. Сопоставляет временную метку и позицию. Развернуть Свернуть
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/wzy901213145499-Tunlview.git
git@api.gitlife.ru:oschina-mirror/wzy901213145499-Tunlview.git
oschina-mirror
wzy901213145499-Tunlview
wzy901213145499-Tunlview
master