Форум программистов, компьютерный форум CyberForum.ru

Организация справки по приложению затемнением неинтересующих областей - Android

Войти
Регистрация
Восстановить пароль
 
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
27.09.2016, 12:04     Организация справки по приложению затемнением неинтересующих областей #1
Приветствую.

Встал вопрос об организации справочной системы по использованию приложения. И захотелось сделать это следующим образом. Грубо говоря, при нажатии пользователя на соотв. кнопку с вызовом справки затемняется вся область приложения, а затем, после каждого клика, подсвечивается конкретный элемент и приводится небольшое текстовое описание этого элемента.

И вопрос в том, как вообще организовать это затемнение части экрана? Может, кто-то сталкивался с подобной задачей? Или там тупо изображения выводятся поверх всего, которое повторяем содержимое экрана?

Типа такого (чтоб было понятно, о чем вообще речь):
Миниатюры
Организация справки по приложению затемнением неинтересующих областей   Организация справки по приложению затемнением неинтересующих областей  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2016, 12:04     Организация справки по приложению затемнением неинтересующих областей
Посмотрите здесь:

Файл справки для Android Android
Узнать объём кэша выделенный приложению Android
Android Как дать своему приложению привилегии Root?
Android Организация обновления программы
Android Как отправить из одного приложения другому приложению широковещательное намерение?
Организация структуры объектов Android
Организация поиска в listview Android
Android Как подключить api сайта к приложению Android?
Android Организация большого массива данных
Как прикреплять к приложению два дополнительных файла? Android
Как реализовать дополнения к приложению Android
Android Передача контактов стандартному приложению "Контакты"

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OlegJV
 Аватар для OlegJV
99 / 99 / 29
Регистрация: 13.03.2016
Сообщений: 452
27.09.2016, 12:19     Организация справки по приложению затемнением неинтересующих областей #2
Можно попробовать ColorFilter
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
27.09.2016, 14:44  [ТС]     Организация справки по приложению затемнением неинтересующих областей #3
Он и к различным View'ам применим? Даже если так, все равно получается много возни((
Тут бы повесить поверх всего какой-нибудь черно-прозрачный элемент с дыркой в нужном месте (в области конкретного элемента)...

PS
Хотя, наверное, попробовать стоит. Хоть что-то)
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
27.09.2016, 15:18     Организация справки по приложению затемнением неинтересующих областей #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
меня немного бомбануло и вот что получилось, цвета на свой вкус, разметка тоже
1. создаем класс той самой вьюшки, которая будет перекрывать наш экран
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
 
import static android.graphics.PorterDuff.Mode.SRC_OUT;
 
public class ShowCaseView extends FrameLayout {
 
    private final Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    private View accentView;
    private float cx;
    private float cy;
    private float r;
 
    public ShowCaseView(Context context) {
        super(context);
        init(context);
    }
 
    public ShowCaseView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init(context);
    }
 
    private void init(Context context) {
        setWillNotDraw(false);
        setLayerType(LAYER_TYPE_SOFTWARE, null);
        paint.setColor(Color.TRANSPARENT);
        paint.setXfermode(new PorterDuffXfermode(SRC_OUT));
        inflate(context, R.layout.show_case_layout, this);
    }
 
    @Override
    public boolean dispatchTouchEvent(MotionEvent e) {
        if (e.getAction() == MotionEvent.ACTION_DOWN) {
            accentView = null;
            ((ViewGroup) getParent()).removeView(this);
        }
        return true;
    }
 
    public void setAccentView(View accentView) {
        this.accentView = accentView;
    }
 
    @Override
    protected void onDraw(Canvas canvas) {
        canvas.drawColor(0xE51249D9);
        canvas.drawCircle(cx, cy, r, paint);
    }
 
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        cx = accentView.getX() + accentView.getWidth() / 2;
        cy = accentView.getY() + accentView.getHeight() / 2;
        r = Math.max(accentView.getWidth(), accentView.getHeight()) / 2 * 1.3f;
        final View okBtn = findViewById(R.id.btn);
        FrameLayout.LayoutParams lp = (LayoutParams) okBtn.getLayoutParams();
        if (cy < h / 2) lp.gravity = Gravity.BOTTOM;
        else lp.gravity = Gravity.TOP;
        if (cx < w / 2) lp.gravity |= Gravity.END;
        else lp.gravity |= Gravity.START;
        okBtn.setLayoutParams(lp);
        requestLayout();
    }
}

2. создаем лаяут для нашей вьюшки show_case_layout.xml
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true">
 
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="32dp"
        android:text="ОК, я понял" />
 
</FrameLayout>

3. разметка основной активити для примера
Кликните здесь для просмотра всего текста
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
 
    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:layout_alignParentTop="true"
        android:background="@color/colorPrimary"
        app:title="Title" />
 
    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/toolbar"
        android:layout_margin="16dp"
        android:text="BUTTON" />
 
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_margin="16dp"
        android:src="@android:drawable/ic_dialog_map"
        app:fabSize="normal" />
 
</RelativeLayout>

4. код активити для примера

Не по теме:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //
        View v = findViewById(R.id.btn); // вьюшка, на которой надо сделать акцент
        showCaseView(v);
    }
 
    private void showCaseView(final View accentView) {
        final ShowCaseView showCaseView = new ShowCaseView(MainActivity.this);
        showCaseView.setAccentView(accentView);
        final ViewGroup rootView = (ViewGroup) findViewById(android.R.id.content);
        rootView.addView(showCaseView);
    }
}


5. PROFIT
Организация справки по приложению затемнением неинтересующих областейОрганизация справки по приложению затемнением неинтересующих областей
monolit
180 / 180 / 21
Регистрация: 24.03.2011
Сообщений: 647
Завершенные тесты: 1
27.09.2016, 22:48  [ТС]     Организация справки по приложению затемнением неинтересующих областей #5
А ты крут!
Плюсов этому господину!
Yandex
Объявления
27.09.2016, 22:48     Организация справки по приложению затемнением неинтересующих областей
Ответ Создать тему
Опции темы

Текущее время: 17:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru