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); } }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.
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>
Partager