2014-12-13 3 views
0

Я попытался найти некоторую информацию, как это сделать, но пока ничего не работает для меня.Android showcaseview пытается сделать круг меньше

Когда я пытаюсь сделать это: новый ShowcaseView.Builder (getActivity(), правда)

Outer 2 светящийся круг исчез, и две другие круги теряют свои цвета. Только кнопка остается для правильного цвета.

Dimens.xml

<dimen name="showcase_radius">40dp</dimen> 
<dimen name="showcase_radius_inner">44dp</dimen> 
<dimen name="showcase_radius_outer">48dp</dimen> 

styles.xml

<style name="CustomShowcaseTheme"> 
     <item name="sv_backgroundColor">#CC000000</item> 
     <item name="sv_buttonText">Close</item> 
     <item name="sv_tintButtonColor">true</item> 
     <item name="sv_titleTextAppearance">@style/CustomTitle</item> 
     <item name="sv_detailTextAppearance">@style/TextAppearance.ShowcaseView.Detail</item> 
</style> 

<style name="CustomTitle" parent="TextAppearance.ShowcaseView.Title"> 
     <item name="android:textColor">#ffffff</item> 
</style> 

<style name="TextAppearance.ShowcaseView.Detail" parent="android:style/TextAppearance"> 
     <item name="android:textColor">#FFFFFF</item> 
</style> 

Пример - как вы можете видеть, что нет цвета не по умолчанию, и внешние круги исчезли:

enter image description here

С теми же настройками, но с новым ShowcaseView.Builder (getActivity()) гостиница ter circle становятся меньше, но другие не следуют за ним, но они остаются там, где они были. enter image description here

Есть ли какое-либо решение, чтобы сделать их все меньше, но выглядят точно так же, как круги по умолчанию?

ответ

1

У меня была такая же проблема, и я обнаружил «решение», которое сработало для меня, но, возможно, это не правильный способ сделать это. Это немного поздно для автора, но, возможно, это может быть полезно для кого-то еще.

  1. Это светящийся круг изображение называется cling_bleached.png. Найти (папку вытяжке-xhdpi) и изменить размер (от 800х800 до 400х400)

  2. Набор showcase_radius 47 (половина оригинала 94). Не меняйте два других радиуса.

  3. Не используйте true в ShowcaseView.Builder.

0

Это решение я использую.

Я предпочитаю это, потому что не изменяет первоначальные источники из ShowcaseView.

Но оно использует отражение.

  1. Первый набор любое желаемое значение в вашем XML ресурсов как

    <dimen name="sv_radius">40dp</dimen> 
    
  2. Используйте этот метод, чтобы создать экземпляр ShowcaseView.Builder

    private ShowcaseView.Builder createShowcaseViewBuilder() { 
    
         ShowcaseView.Builder showcaseViewBuilder = new ShowcaseView.Builder(activity, true) 
           /** 
           * set theme 
           */ 
           .setStyle(R.style.ShowcaseTheme4); 
         /** 
         * Load the new radius from resource xml 
         */ 
         float radius = activity.getResources().getDimension(R.dimen.sv_radius); 
    
         try { 
          Field showcaseViewField = ShowcaseView.Builder.class.getDeclaredField("showcaseView"); 
          showcaseViewField.setAccessible(true); 
          Object showcaseViewObject = showcaseViewField.get(showcaseViewBuilder); 
          Field showcaseDrawerField = ShowcaseView.class.getDeclaredField("showcaseDrawer"); 
          showcaseDrawerField.setAccessible(true); 
          Object showcaseDrawerObject = showcaseDrawerField.get(showcaseViewObject); 
    
          Field innerRadiusField = null; 
          try { 
           innerRadiusField = showcaseDrawerObject.getClass().getDeclaredField("innerRadius"); 
          } catch (NoSuchFieldException e) { 
           e.printStackTrace(); 
          } 
          if (null != innerRadiusField) { 
           /** 
           * detected that the new showcase-drawer is used 
           */ 
           innerRadiusField.setAccessible(true); 
    
           Field outerRadiusField = showcaseDrawerObject.getClass().getDeclaredField("outerRadius"); 
           outerRadiusField.setAccessible(true); 
    
           float oldInnerRadius = (float) innerRadiusField.get(showcaseDrawerObject); 
           float oldOuterRadius = (float) outerRadiusField.get(showcaseDrawerObject); 
           float newOuterRadius = radius * (oldOuterRadius/oldInnerRadius); 
    
           innerRadiusField.set(showcaseDrawerObject, radius); 
           outerRadiusField.set(showcaseDrawerObject, newOuterRadius); 
          } else { 
           /** 
           * detected that the old showcase-drawer is used (no outer radius) 
           */ 
           Field showcaseRadiusField = showcaseDrawerObject.getClass().getDeclaredField("showcaseRadius"); 
           showcaseRadiusField.setAccessible(true); 
           showcaseRadiusField.set(showcaseDrawerObject, radius); 
          } 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
         return showcaseViewBuilder; 
        }