2017-01-13 70 views
3

我有一項活動A.我爲此活動的用戶創建了一種教程,教他如何在該屏幕上使用該應用程序。Android部分激活活動

爲此,我的要求是: 我想模糊活動的所有視圖,只有一個視圖。我想提示用戶通過指向該視圖的手形圖單擊該視圖。

如果用戶點擊模糊/變灰的區域,則不會發生任何事情,但如果他點擊該特定活動視圖,則應該對該觸摸作出反應。

我正在考慮爲此使用全屏幕片段。該片段將採取以下輸入從活動:

  • 什麼座標,是不應該模糊的屏幕和觸摸事件傳遞給活動
  • 上它應該顯示用手指點圖像的座標。

從這些座標後,片段背景將變得模糊。

我想確認如果可能的話,使片段局部活躍,即委託它的觸摸事件的活動爲活動的特定視圖。

另外,請讓我知道是否有任何其他更好的方法來實現相同的事情。

EDIT1:

這裏使用一個片段,因爲我想在未來有不同的屏幕上這種類型的行爲的思考。在這種情況下,我會製作通用的片段,它需要一些輸入(如上所述)並在不同的屏幕上使用它。

+1

如何Android的魅力庫?根據您的設計從Github導入代碼並自定義。 –

+0

根本不知道這個圖書館!感謝您的信息。那麼我會先評估圖書館。 – Yashasvi

回答

1

有一個叫非常好的圖書館SCV這確實你想達到什麼樣的,你可以自定義樣式太。我第一次使用這個應用程序是打開的,向用戶顯示一個教程。

根據他們Github

的ShowcaseView(SCV)庫旨在突出和展示應用程序的特定部分用戶提供了一個獨特和有吸引力的疊加。這個庫非常適合爲用戶指出興趣點,手勢或模糊但有用的項目。

延伸閱讀:

enter image description here

+0

woah !我根本不知道這個圖書館,謝謝哥們!讓我評估一下吧 – Yashasvi

+0

沒問題,一旦你把頭部纏繞起來,它就非常有用 –

+0

你覺得怎麼樣?有用嗎? –

1

我發現它更容易包括圍繞我的活動UI的「額外」的佈局,然後大多是透明的過濾器添加最高-Z灰色,並把上的說明。

指令的每個「步驟」都是一個不同的佈局,它們在點擊時動態加載到該佈局容器中。 (只是另一種方法)


的 '容器' 的佈局是:FrameLayout裏

然後在我的活動我有:(忽略壞命名)

private void addOverlayLayout() { 

    frameLayout = (FrameLayout) findViewById(R.id.framelayoutInner); 
    frameLayout3 = (FrameLayout) findViewById(R.id.framelayout3); 

    frameLayout3.setBackgroundColor(Color.DKGRAY); 
    frameLayout3.setAlpha(0.3f); 

    // Dynamically create a relativelayout which will be appended to framelayout 
    relativeLayout = new RelativeLayout(getApplicationContext()); 
    relativeLayout.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams 
      .MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); 

    instructionOverlays.add(createSimpleClickInstruction(R.layout.instruction_reader_1)); 
    instructionOverlays.add(createSimpleClickInstruction(R.layout.instruction_reader_2)); 

    if (FullscreenReaderActivity.isFirstRun) { 
     displayNextGuide(); 
    } 

} 

public void displayNextGuide() { 

    // clean relative layout if it has views 
    relativeLayout.removeAllViews(); 
    // clean frame layout if it has child (safe if empty) 
    frameLayout.removeView(relativeLayout); 

    if (!isFirstRun) { 
     return; 
    } 

    if (instructionOverlays.size() > 0) { 
     runOnUiThread(instructionOverlays.get(0)); 
     instructionOverlays.remove(0); 
    } else { 
     frameLayout3.setBackgroundColor(Color.TRANSPARENT); 
     frameLayout3.setAlpha(1.0f); 
    } 
} 

public Runnable createSimpleClickInstruction(final int resource) { 
    return new Runnable() { 
     @Override 
     public void run() { 
      getLayoutInflater().inflate(
        resource, 
        relativeLayout, 
        true 
      ); 
      relativeLayout.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        displayNextGuide(); 
       } 
      }); 
      frameLayout.addView(relativeLayout); 
     } 
    }; 
} 
+0

你是如何部分活躍的?所有的意見應該是灰色的,除了那個,我會提示用戶點擊。如果用戶點擊模糊/灰色的區域,則不會發生任何事情,但如果他點擊該特定的活動視圖,則應該對該觸摸作出反應。 – Yashasvi

+0

添加了我有的代碼,如果你想部分激活,那麼使你的佈局非灰色(可能更容易永遠不會灰色在那裏首先),並有箭頭指向/告訴他們在哪裏點擊/等。我只需在onclicklistener中放置我自己的不可見視圖,並通過代碼調用它下面的目標。甚至不用擔心點擊通過(這是我的用例之外,我的更多隻是'指令'不要求他們點擊除'下一個','下一個'等。 – mawalker

+1

因此,在查看SCV庫在@Bradley Wilson的文章中提到,它可能比手動做這件事更容易,我做了這個練習,看看我是否可以做到這一點,但是這種方法至少不需要庫。 – mawalker