Вертикальный индикатор выполнения в Android - PullRequest
7 голосов
/ 07 января 2012

Я хочу сделать вертикальный индикатор выполнения в Android при выполнении определенного действия.Прогресс должен начинаться с первой иконки и заканчиваться последней иконкой, показывающей устойчивый прогресс.Кажется, я не могу найти способ сделать это.

если какое-либо тело может помочь получить одну ногу в дверь.Я буду очень признателен.

Ответы [ 3 ]

14 голосов
/ 07 января 2012

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

Если последний вариант - ваш выбор, то ваше фактическое изображение будет состоять из двух элементов рисования вместе в <layer-list>. Один статический, а другой представляет ClipDrawable, который будет раскрывать часть цветного изображения на основе значения его уровня. Например, создайте файл XML:

Рез / рисуем / progress_background.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
  <item>
    <bitmap android:src="@drawable/ic_launcher_bw"/>
  </item>
  <item>
    <clip
        android:clipOrientation="vertical"
        android:gravity="bottom"
        android:drawable="@drawable/ic_launcher"/>
  </item>
</layer-list>

Затем установите это Drawable на что-то вроде ImageView, чтобы отобразить прогресс, и измените значение с помощью вызовов на setLevel(), т.е.

//This is any view subclass that you have chosen to do this
ImageView progress;

progress.setImageResource(R.drawable.progress_background);

//Adjust the progress by adjusting the drawable's level
progress.setImageLevel(500);
// -- OR --
progress.getDrawable().setLevel(500);

Уровни рисования по умолчанию устанавливаются в диапазоне от 0 до 10000, чтобы представить их полностью обрезанными до полностью раскрытых.

НТН

0 голосов
/ 07 января 2012

Лучший способ сделать это - использовать исходное растровое изображение в качестве фона, а затем нарисовать на нем части готового изображения снизу вверх.Таким образом, вам не нужно кучу разных изображений - просто постепенно нарисуйте готовое изображение.Я думаю, что это можно сделать примерно так:

// setup
// assuming firstImage is the initial one and secondImage is the final one
int totalHeight = firstImage.getHeight();
Canvas canvas = new Canvas(firstImage);
ImageView imgView = (ImageView)findViewById(R.id.flame_bar_view);
imgView.setImageBitmap(firstBitmap);
Rect src = new Rect (0, totalHeight, 
                     firstImage.getWidth(), totalHeight);

// then on each update
void updateFlameBar(float percentage) {
    int height = (int)(totalHeight * percentage);
    src.top = totalHeight - height;
    canvas.drawBitmap(secondImage, src, src, null);
}
0 голосов
/ 07 января 2012

вы можете использовать LevelListDrawable и установить уровень с помощью setLevel (int)

http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html

Вы можете добавлять непрерывные кадры индикатора выполнения в levellistddrawable и продолжать увеличивать уровень.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...