Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Медленное рисование линии 
:(
    Опции темы
hyx
Дата 13.3.2013, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 30.3.2008

Репутация: нет
Всего: нет



Привет всем. Пытаюсь сделать медленное рисование линии, а получается наоборот - медленное исчезание. Что делаю не так?

Код

private static class SampleView extends View {
        private Paint followingPaint;
        private Path mPath = new Path();
        private PathEffect mEffect;
        private float mPhase;
        private PathMeasure pm;
        private float pmLen;
        private float fSegmentLen;
        private static Bitmap bmSprite;

        public SampleView(Context context) {
            super(context);
            setFocusable(true);
            setFocusableInTouchMode(true);
            setBackgroundColor(Color.TRANSPARENT);
            followingPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
            followingPaint.setStyle(Paint.Style.STROKE);
            followingPaint.setStrokeWidth(2);
            
            mPath.moveTo(100, 100);

            mPath.lineTo(100, 100);
            mPath.lineTo(300, 100);
            mPath.lineTo(300, 300);
            mPath.lineTo(350, 350);
        
            pm = new PathMeasure(mPath, false);
            
            pmLen = pm.getLength();

            if (bmSprite == null)
                bmSprite = BitmapFactory.decodeResource(getResources(),
                        R.drawable.feed_liked_arrow);
            fSegmentLen = pm.getLength() / iMaxAnimationStep;
        }

        private static int iMaxAnimationStep = 80;
        private int iCurStep = 0;

        @Override
        protected void onDraw(Canvas canvas) {
            
            mEffect = new DashPathEffect(new float[] { pmLen, pmLen },
                    -fSegmentLen * iCurStep);
            
                if (iCurStep <= iMaxAnimationStep) {
                    iCurStep++; // advance to the next step
                    mPhase -= 8;
                } 
            
            Matrix mxTransform = new Matrix();
            pm.getMatrix(fSegmentLen * iCurStep, mxTransform,
                    PathMeasure.POSITION_MATRIX_FLAG
                            + PathMeasure.TANGENT_MATRIX_FLAG);
            mxTransform.preTranslate(-bmSprite.getWidth() + 8,
                    -bmSprite.getHeight() + 6);
            followingPaint.setPathEffect(mEffect);
            followingPaint.setColor(Color.BLUE);
            canvas.drawPath(mPath, followingPaint);
            invalidate();
        }
    }

PM MAIL   Вверх
AndreyK
Дата 13.3.2013, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 102
Регистрация: 15.3.2007

Репутация: нет
Всего: нет



Чтоб медленно рисовать линию, надо по таймеру (в другом потоке например каждые 100 милисекунд) изменять переменную=длину линии и вызывать invalidate.
В методе onDraw invalidate вызывать не надо - он сам вызывается в ответ на эту команду.
В onDraw надо проверять ту самую переменную (длину линии) и соответственно рисовать линию нужной длины.

Где-то так.

А что ваш код делает - я не очень понял.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0725 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.