2017-01-13 5 views
3

У меня есть активность A. Я создаю учебник для пользователя для этой деятельности, чтобы научить его, как он может использовать приложение на этом экране.Android частично активен Активность

Для этого моё требование: Я хочу размыть все виды деятельности, кроме одного вида. Я хочу, чтобы пользователь нажимал на этот вид через изображение руки, указывающее на это представление.

Ничего не должно происходить, если пользователь нажимает на область размытого/серого цвета, но если он набирает это особое активное изображение, он должен реагировать на это касание.

Я думал об использовании полного фрагмента экрана для этого. Фрагмент будет иметь следующий входной сигнал от активности:

  • для того, что координаты, не должен размывать экран и передать сенсорное событие активности
  • координаты, на которых он должен показать, что, указывая руку на изображение.

После этих координат фон фрагмента будет размыт.

Я хотел подтвердить, возможно ли, чтобы фрагмент был частично активным, то есть делегировать его событиям касания к активности для определенного вида активности.

Также, пожалуйста, дайте мне знать, если есть другой лучший подход к достижению того же.

Edit1:

Думая использования фрагмента здесь, потому что я хочу этот тип поведения на другом экране в будущем. В этом случае я бы сделал этот фрагмент generic, который принимает некоторые входы (как описано выше) и использует его на разных экранах.

+1

Как насчет Android Витрина библиотеки? Импортируйте код из Github и настройте его в соответствии с вашим дизайном. –

+0

Не знаю об этой библиотеке! Спасибо за информацию. Сначала я буду оценивать библиотеку. – Yashasvi

ответ

1

Там очень хорошая библиотека называется SCV, который делает то, что вы пытаетесь достичь, вы также можете настроить стили для него. Я использовал это в первый раз, когда приложение открыто, чтобы показать пользователю учебник.

По их Github

ShowcaseView библиотека (SCV) предназначен для выделения и демонстрации отдельных частей приложений пользователя с отличительной и привлекательной накладкой. Эта библиотека отлично подходит для указания точек интереса для пользователей, жестов или неясных, но полезных предметов.

Дополнительная литература:

enter image description here

+0

woah Я не знал об этой библиотеке вообще. Спасибо, приятель, дайте мне оценить. – Yashasvi

+0

Нет проблем, если у вас есть своя голова вокруг него, это очень полезно. –

+0

Что вы думаете? Полезно? –

1

Мне было намного проще включить «дополнительный» макет вокруг пользовательского интерфейса моей деятельности, а затем добавить к нему на нем самый большой серый прозрачный фильтр и поместить на него инструкции.

Каждый «шаг» инструкций представлял собой другой макет, который динамически загружался в этот контейнер макета при нажатии. (Еще один подход)


'контейнера' макет является: 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

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