2016-09-08 3 views
0

1つのアプリを開発します。 StartActivityクラスから始まるすべてのサービスを使用してロードします。私は読み込まれたコンテンツにshowcaseviewを設定したいと思います。私はthis github demo libをshowcaseviewに使用しています。

ご了承ください。ありがとうございました。

問題はです: - アクティビティコンテキストを渡すときはnullか、サービスクラスからアクティビティコンテキストを渡す方法がわかりません。

私のサービスを開始すると、その後、UIは、あなたのコード内の主な問題がある。この screen shortサービスをAndroidで使用してshowcase-viewを使用する方法は?

StartActivity.java

public class StartActivity extends Activity { 

    private static final String SHOWCASE_ID = "com.zennaxx.screenrecorder"; 

    private ImageView btnCamera; 
    private ImageView btnSetting; 
    private ImageView btnAlbum; 
    private ImageView btnClose; 

    Activity activity; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     initView(); 
    } 

    public void initView() 
    { 
     setContentView(R.layout.floating_view); 

     activity = StartActivity.this; 

     btnCamera = (ImageView)findViewById(R.id.btn_camera); 
     btnSetting = (ImageView)findViewById(R.id.btn_settings); 
     btnAlbum = (ImageView)findViewById(R.id.btn_album); 
     btnClose = (ImageView)findViewById(R.id.btn_close); 

     startShowcaseView(); 
    } 

    private void startShowcaseView() 
    { 
     ShowcaseConfig config = new ShowcaseConfig(); 
     config.setDelay(500); // half second between each showcase view 

     MaterialShowcaseSequence sequence = new MaterialShowcaseSequence(activity, SHOWCASE_ID); 
     sequence.setOnItemShownListener(new MaterialShowcaseSequence.OnSequenceItemShownListener() { 
      @Override 
      public void onShow(MaterialShowcaseView itemView, int position) { 

       Toast.makeText(itemView.getContext(), "Item #" + position, Toast.LENGTH_SHORT).show(); 

       if (position == 3) { 
        startService(); 
       } 
      } 
     }); 
     sequence.setConfig(config); 
     sequence.addSequenceItem(btnCamera, "This is button one", "GOT IT"); 
     sequence.addSequenceItem(btnSetting, "This is Setting button ", "GOT IT"); 
     sequence.addSequenceItem(btnAlbum, "This is Album button ", "GOT IT"); 
     sequence.addSequenceItem(btnClose, "This is Close button ", "GOT IT"); 

     Log.i("Ready to Showcaseview", "(^'_'^)"); 
     sequence.start(); 
    } 

    private void startService() 
    { 
     startService(new Intent(getApplicationContext(), FloatingViewService.class)); 
     finish(); 
    } 
} 

FloatViewService.java

public class FloatingViewService extends Service { 

    private static final String SHOWCASE_ID = "example.showcaseview"; 
    private WindowManager windowManager; 
    private View floatingView; 
    private TextView mTextCoolDown; 
    private WindowManager.LayoutParams params; 

    private ImageView btnCamera; 
    private ImageView btnSettings; 
    private ImageView btnAlbum; 
    private ImageView btnExit; 

    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 

     return START_STICKY; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     Log.i("onCreate()...", "...called"); 
     initView(); 
    } 



    private void initView() { 

     Log.i("initView()...","...called"); 
     windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 

     int screen_height = getResources().getDisplayMetrics().heightPixels; 

     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     floatingView = inflater.inflate(R.layout.floating_view, null); 

     params = new WindowManager.LayoutParams(
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.WRAP_CONTENT, 
       WindowManager.LayoutParams.TYPE_PHONE, 
       WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
       PixelFormat.TRANSLUCENT); 

     params.gravity = Gravity.TOP | Gravity.LEFT; 
     params.x = 0; 
     params.y = 100; 

     btnCamera = (ImageView) floatingView.findViewById(R.id.btn_camera); 
     btnSettings = (ImageView) floatingView.findViewById(R.id.btn_settings); 
     btnAlbum = (ImageView) floatingView.findViewById(R.id.btn_album); 
     btnExit = (ImageView) floatingView.findViewById(R.id.btn_close); 

     btnExit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       stopSelf(); 
      } 
     }); 


     windowManager.addView(floatingView, params); 


    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     if (floatingView != null) 
     { 
      if(windowManager != null) 
      { 
       windowManager.removeView(floatingView); 
      } 
     } 
    } 
} 

答えて

1

のようなものですあなたはACを作成しようとしている手動で指導する。オブジェクトを自分で作成することもできますが(new StartActivity())、システムによって管理されないため、実際にはアプリケーション内のアクティブなスクリーンを表すものではないため、Showcaseライブラリにとっては役に立ちません。

オーバーレイビューのチュートリアルを作成したいので、ビューからサービスを開始するtransparent activityを作成することをお勧めします。チュートリアルを表示するために使用できます。もちろん、Context.startActivity()で正しく開始する必要があります。

+0

お返事ありがとうございました。このタイプまたは透明度のレイアウトを達成する方法がありますかデモがありますか? – Ninja

+0

@忍者残念なことに、いいえ、これは自分で実験しなければならない方向です。あなたが持っている場合はかなり珍しいです。 – Malcolm

+0

あなたは私のアプリで言ったようにショーケースビューを設定することができますが、ショーケースビューを表示しない最後のボタンが1つあります。できるだけ助けてください。 – Ninja

関連する問題