как определить, использует ли полоса прогресса Android определенный стиль

как определить, использует ли полоса прогресса Android определенный стиль? я знаю, как установить его с помощью xml или кода, но как определить стиль, используемый во время выполнения? нет getStyle или подобных методов. и нет, использование неопределенного или неопределенного только не работает, потому что существует неопределенный горизонтальный стиль прогресса.

  • Я могу определить соотношение ширины и высоты, если оно больше 1, то оно горизонтальное, иначе это круглая прялка. но как мне убедиться, что это не просто странно растянутая прялка?

изменить: это предполагает, что я разработаю для Android версии Jelly Bean или более


person eriuzo    schedule 17.12.2014    source источник
comment
Вам нужно обнаружить это внутри вашего собственного кода?   -  person shkschneider    schedule 17.12.2014
comment
на самом деле мне нужно иметь возможность изменять чертежи во время выполнения, я не хочу устанавливать неправильный рисунок в неправильный стиль. Я атаковал это неправильно?   -  person eriuzo    schedule 17.12.2014
comment
Ну, я думаю, вы могли бы 1. использовать класс ProgressBar и попытаться вычислить эти случаи один за другим (getProgress(), isIndeterminate()) или 2. просто создать собственный класс MyProgressBar, который будет расширять ProgressBar?   -  person shkschneider    schedule 17.12.2014
comment
хм, вы правы, я рассмотрю эти варианты, спасибо   -  person eriuzo    schedule 18.12.2014


Ответы (1)


наконец, я использовал первоначальное предложение в сочетании с комментариями:

if (!pb.isIndeterminate()) {
    isCircular = determineCircular(pb.getProgressDrawable());
} else {
    isCircular = determineCircular(pb.getIndeterminateDrawable());
    if (!isCircular) {
        pb.startAnimation(pb.getAnimation());
    }
}
protected boolean determineCircular(Drawable drawable) {
    int iw = drawable.getIntrinsicWidth();
    int ih = drawable.getIntrinsicHeight();
    if (ih == 0) return false; // division by zero
    double rat = iw / ih;
    // anticipate for some weird paddings
    return 0.8 < rat && rat < 1.2;
}

С какими-то странными скинами производителя пока не тестировал, но думаю для стандартного вменяемого андроида этого будет достаточно.

person eriuzo    schedule 24.12.2014