2014-12-13 95 views
0

我试图找到一些信息如何做到这一点,但目前为止我没有任何作品。Android showcaseview试图让圈子更小

当我尝试这样做: 新ShowcaseView.Builder(getActivity(),TRUE)

外泛着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圈越来越小,但其他人不遵循它,但他们留在原地。 enter image description here

是否有解决方案,使他们都变得更小,但看起来完全一样的默认圈子?

回答

1

我有同样的问题,我发现了一个“解决方案”,为我工作,但也许不是正确的方法来做到这一点。对作者来说有点迟,但也许对其他人有帮助。

  1. 即发光的圆是图像称为cling_bleached.png。找到它(绘制-xhdpi文件夹),调整其大小(从为800x800到400x400的)

  2. 设置showcase_radius 47(原来的一半94)。不要改变另外两个半径。

  3. 不要在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; 
        } 
    
的实例