Bonjour,
Je cherche actuellement à afficher une seekbar lors de l'appuie sur une view (le progress actuelle) qui viendrait s'afficher sous le doigt et permettrait de modifier le progress sans avoir à lever le doigt, juste en glissant.

Actuellement j'arrive à afficher une seekbar avec le progress actuelle mais je suis obligé de lever le doigt pour que celle-ci commence à bouger...

J'ai essayé de donner le focus, d'utiliser setSelected(true) ainsi que quelques autres mais je n'arrive pas à trouver comment faire ou quel terme chercher sur google...

voilà ce que j'ai actuellement:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
viewHolderRelais.tv_prcDim.setOnTouchListener(new View.OnTouchListener() {
            ViewGroup root;
            float yOrigine;
 
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                    switch (event.getAction()) {
                        case MotionEvent.ACTION_DOWN:
                            try {
                                root = (ViewGroup) v.getRootView();
                                if (root != null) {
                                    final popup_SeekBar seek = new popup_SeekBar(root.getContext(), root, _progress);
                                    seek.setListener(new SeekBar.OnSeekBarChangeListener() {
                                        @Override
                                        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                                            viewHolderRelais.tv_prc.setText(String.format(Locale.getDefault(),"%d%%",Math.round(progress*100f/64f)));
                                        }
 
                                        @Override
                                        public void onStartTrackingTouch(SeekBar seekBar) {
                                            clickTime = 1;
                                        }
 
                                        @Override
                                        public void onStopTrackingTouch(SeekBar seekBar) {
                                            mListener.onProgress(mItems.get(viewHolderRelais.getAdapterPosition()),seekBar.getProgress());
                                            clickTime = 0;
                                            seek.close();
                                        }
                                    });
                                    yOrigine = event.getRawY();
                                    seek.setTranslation(event.getRawX(),yOrigine);
                                }
                            } catch (ClassCastException ex) {
                                ex.printStackTrace();
                                return false;
                            }
                            break;
                    }
                return true;
            }
        });
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
public class popup_SeekBar {
    private ViewGroup layout;
    private ViewGroup parent;
    private SeekBar seek;
 
    public popup_SeekBar(Context ctx, ViewGroup parent, int progress) {
        this.parent = parent;
        layout = (ViewGroup) View.inflate(ctx, R.layout.dialog_seekbar, parent);
        layout = layout.findViewById(R.id.layoutSeekBar);
        seek = layout.findViewById(R.id.seekBar);
        seek.setProgress(progress);
    }
 
    public void setListener(SeekBar.OnSeekBarChangeListener listener){
        seek.setOnSeekBarChangeListener(listener);
    }
 
    public void setTranslation(float x, float y){//On centre sur la position
        layout.setTranslationX(x-200);//TODO a placer dans dimen
        layout.setTranslationY(y-30);//TODO a placer dans dimen
    }
 
    public void close(){
        parent.removeView(layout);
    }
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/layoutSeekBar"
    android:background="@drawable/bg_carre"
    android:layout_height="60dp"
    android:layout_width="400dp">
    <SeekBar
        android:id="@+id/seekBar"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        android:layout_height="0dp"
        android:layout_width="0dp"
        android:max="64"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Lorsque je leve le doigt puis utilise la seekbar le pointeur bouge normalement et lorsque je releve le doigts la seekbar est supprimé après récupération du progress.