2015-03-30 1 views
2

у меня есть это в моем MainActivity.java:Где я должен разместить построитель ShowCaseView в этом случае?

public class MainActivity extends Activity { 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     setupHomeScreen(); 
    } 
    public void setupHomeScreen() { 
     File latestPic = getMostRecentSnappiePicture(); 
     if(latestPic != null){ 
      //display pic 
      LinearLayout layout = (LinearLayout) findViewById(R.id.mainLayout); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
       layout.setBackground(Drawable.createFromPath(latestPic.getAbsolutePath())); 
      } 
      else{ 
       layout.setBackgroundDrawable(Drawable.createFromPath(latestPic.getAbsolutePath())); 
      } 
      //hide tutorial 
      findViewById(R.id.howitworks).setVisibility(View.INVISIBLE); 

     } 
     else{ 
      //show tutorial 
      findViewById(R.id.howitworks).setVisibility(View.VISIBLE); 
      new ShowcaseView.Builder(this) 
       .setTarget(new ActionViewTarget(this, ActionViewTarget.Type.HOME)) 
       .setContentTitle("ShowcaseView") 
       .setContentText("This is highlighting the Home button") 
       .hideOnTouchOutside() 
       .build(); 
     } 
    } 
} 

Как вы можете видеть, в OnCreate, он вызывает setupHomeScreen и проверяет, существует ли файл. Если он не существует, он отображает макет изображения «howitworks» учебника, а также создает витринный вид.

Так что все это прекрасно работает. Единственная проблема возникает, когда вы пытаетесь покинуть эту активность, пока showcaseView все еще существует. Или иногда даже после выхода из витринного представления и попытки запуска нового действия эта ошибка возникает: ShowcaseView - width and height must be > 0

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

someView.post(new Runnable() { 
    @Override 
    public void run() { 
     // my ShowcaseView builder here 
    } 
}); 

Единственным, я понятия не имею, куда поместить это, так как с моей точкой зрения витрины должны отображается только в том случае, если файл из getMostRecentSnappiePicture() имеет значение NULL. Итак, как я могу поместить обратный вызов создания представления в мою логику, чтобы проверить, что этот файл имеет значение null первым?

ответ

0

похоже, что вы выделяете кнопку HOME вместо представления «howitworks». Попробуйте переключить линию

.setTarget(new ActionViewTarget(this, ActionViewTarget.Type.HOME)) 

с

.setTarget(new ViewTarget(R.id.howitworks,this)); 

Кроме того, следующее видео может помочь. Это 20-минутный учебник о том, как использовать ShowCaseView внутри действия с помощью 3 кнопок. Он объявляя onClickListener где он программно изменяет TargetView выделенного showCaseView

https://www.youtube.com/watch?v=3zdeFSBplps

видео на испанском языке, но, по крайней мере, вы будете иметь возможность следить за шагами, так как он пишет код с нуля ,

 Смежные вопросы

  • Нет связанных вопросов^_^