Форум программистов, компьютерный форум CyberForum.ru

Как запустить анимацию - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Как можно сделать выборку последних контактов? http://www.cyberforum.ru/android-dev/thread1608331.html
Здравствуйте уважаемые! есть выбор телефона из контактов для отправки SMS (при выборе телефон заносится в EditText), и не знаю подхода как можно организовать (по кнопке или каким-то выпадающим списком) напр. последние 10 контактов на которые отправлялось SMS ну и с возможностью очистить список последних. Как это вообще можно сделать, куда копать? Спасибо!
Android Обработка касания touch Всем привет, я пытаюсь оброботать на картинке нажатие на найденный предмет по координатом через метод onTouch(View v, MotionEvent event){ x = (int)event.getX(); y = (int)event.getY(); } При нажатии на центр найденного предмета, я получил его координаы по х и у ,но теперь мне нужно оброботать касание всего предмета по окружности как на скрине http://www.cyberforum.ru/android-dev/thread1608300.html
Кто нибудь использует/использовал эту либу? Android
'com.squareup.okhttp:okhttp:2.6.0' OkHttpClient Пользуетесь ли вы этой библиотекой?
Android Отправка сообщения на ПК с реализацией обратной связи
Всем доброго времени суток. Имеется рабочая станция, обычный комп. У этого компа есть доступ к серверам предприятия и этот же комп имеет доступ к интернету, IP-динамический. Так же есть Android-телефон, с которого нужно отправлять сообщение с командами для ПК, на пк слушалка принимает и выполняет команду, и должна вернуть результат телефону отправившему команду. Телефон находится всегда в...
Android Как делать панель изменяемой высоты? http://www.cyberforum.ru/android-dev/thread1607648.html
Как делать панель которую можно потянуть за края и она увеличивается (выезжает с низу в верх). Панель располагается поверх FrameLayout. Аналогичные элементы можно встретить в приложениях google maps, yandex maps, 2gis. Подскажите, пожалуйста, как можно такое реализовать или как найти в интернете. ...
Android Переход к следующимо треку Пишу аудиоплейер, нужно что бы по окончанию трека автоматически включался следующий, по окончанию плейлиста - первый. Tреки помещены в ArreyList. подробнее

Показать сообщение отдельно
Serbis
3 / 3 / 2
Регистрация: 13.07.2012
Сообщений: 121
13.12.2015, 11:50  [ТС]     Как запустить анимацию
bastrakov, сам отвечу на свой вопрос. Существуют ситуации, когда нужно анимировать не сам вьюв, а отдельную его часть, например пишете вы некую особую галерею картинок. Вам нужно анимировать например появление картинки. Проблема в том, что эта картинка является не объектов класса View, а объектом Bitmap на канве которая рисуется в onDraw и к ней нельзя применить обычный аниматор. Т. е. что бы ее например сдвинуть, нужно получить от класса аниматора значение интерполяции, и на его основе произвести расчет нового положения картинки и провести частичную инвалидацию вьюва. Метод startAnimation вызывает анимацию к матрице всего вьюва, а не к его отдельной части, и исправить это никак нельзя. Т. е. если у вас три картинки которые нужно анимировать, нужно будет по логике три раза вызывать startAnimation. Но ничего не получится, так как каждый последующий вызов блокирует предыдущий. Класс Animation, который я так упорно пытался заставить работать, это базовый класс, с очень сложной инициализацие. Под простым вызовом startAnimation, находится как я понял не одна сотня строк по настройке объекта Animation и делать это в рамках кастномного вьюва просто нелогично. Для этого был придуман класс ValueAnimator, который ничего не делает, кроме того что считает интерполяцию, которая собственно и нужна для решения этой задачи. Вот собственно класс который мне был нужен, кастомная scale анимация, определяющая положение Bitmap от интреполятора. Может быть кому пригодится.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
public class ScaleCustomAnimation extends ValueAnimator {
    public interface OnTransfoirmationListener {
        public void onTransform(float sx, float sy, int position);
    }
 
    private OnTransfoirmationListener onTransfoirmationListener;
 
    private final Resources mResources;
 
    private float mFromX;
    private float mToX;
    private float mFromY;
    private float mToY;
 
    private int mFromXType = TypedValue.TYPE_NULL;
    private int mToXType = TypedValue.TYPE_NULL;
    private int mFromYType = TypedValue.TYPE_NULL;
    private int mToYType = TypedValue.TYPE_NULL;
 
    private int mFromXData = 0;
    private int mToXData = 0;
    private int mFromYData = 0;
    private int mToYData = 0;
 
    private int mPosition  = 0;
 
 
    public ScaleCustomAnimation(float fromX, float toX, float fromY, float toY) {
        mResources = null;
        mFromX = fromX;
        mToX = toX;
        mFromY = fromY;
        mToY = toY;
    }
 
    public ScaleCustomAnimation(float fromX, float toX, float fromY, float toY,
                                float pivotX, float pivotY) {
        mResources = null;
        mFromX = fromX;
        mToX = toX;
        mFromY = fromY;
        mToY = toY;
    }
 
    public ScaleCustomAnimation(float fromX, float toX, float fromY, float toY,
                                int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) {
        mResources = null;
        mFromX = fromX;
        mToX = toX;
        mFromY = fromY;
        mToY = toY;
    }
 
    public int getPosition() {
        return mPosition;
    }
 
    public void setPosition(int mPosition) {
        this.mPosition = mPosition;
    }
 
    float resolveScale(float scale, int type, int data, int size, int psize) {
        float targetSize;
        if (type == TypedValue.TYPE_FRACTION) {
            targetSize = TypedValue.complexToFraction(data, size, psize);
        } else if (type == TypedValue.TYPE_DIMENSION) {
            targetSize = TypedValue.complexToDimension(data, mResources.getDisplayMetrics());
        } else {
            return scale;
        }
 
        if (size == 0) {
            return 1;
        }
 
        return targetSize/(float)size;
    }
 
    public void init(int width, int height, int parentWidth, int parentHeight) {
        mFromX = resolveScale(mFromX, mFromXType, mFromXData, width, parentWidth);
        mToX = resolveScale(mToX, mToXType, mToXData, width, parentWidth);
        mFromY = resolveScale(mFromY, mFromYType, mFromYData, height, parentHeight);
        mToY = resolveScale(mToY, mToYType, mToYData, height, parentHeight);
    }
 
    public void animate() {
        setFloatValues(0f, 1f);
        setInterpolator(new AccelerateDecelerateInterpolator());
        addUpdateListener(new AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator animation) {
                float interpolatedTime = (Float) (animation.getAnimatedValue());
                float sx = 1.0f;
                float sy = 1.0f;
                if (mFromX != 1.0f || mToX != 1.0f) {
                    sx = mFromX + ((mToX - mFromX) * interpolatedTime);
                }
                if (mFromY != 1.0f || mToY != 1.0f) {
                    sy = mFromY + ((mToY - mFromY) * interpolatedTime);
                }
 
                onTransfoirmationListener.onTransform(sx, sy, mPosition);
 
            }
        });
        start();
    }
 
    public void setOnTransformationListener(OnTransfoirmationListener onTransfoirmationListener) {
        this.onTransfoirmationListener = onTransfoirmationListener;
    }
}
 
Текущее время: 17:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru