Schließlich fand ich Tutorial mit Floating Action Button Beispiel.Relocationg Floating Action Button von Benutzer
-Link: http://www.viralandroid.com/2016/02/android-floating-action-menu-example.html
Nun möchte Ich mag Benutzer ermöglichen, Aktionstaste an eine beliebige Stelle auf dem Bildschirm zu bewegen. Dann könnte er es öffnen und eine der Optionen auswählen.
Das letzte Mal habe ich sehr dasselbe mit View-Objekten statt FloatingActionButton-Objekt gemacht und es hat perfekt funktioniert. Mit FloatingActionButton ist es nicht gelungen.
Ich habe zwei Versuche unternommen.
1) In der ersten setze ich SetOnTouchListiner auf LayoutInfater-Objekt (wie in meinem Beispiel), aber das einzige, was ich tun konnte, ist den Bildschirm nach links oder rechts wischen und dann leicht nach rechts oder links bewegt. Als ich den Knopf berührte und dann bewegte - nichts passierte.
2) Ich habe auch versucht, setOnTouchListiner direkt auf FloatingActionButton zu setzen, aber es erscheint nicht einmal.
Wie kann ich Benutzer diesen FloatingActionButton verschieben lassen?
Hier ist Code mit Ansicht Objekte und unter meinem Versuch nein. 1 mit FloatingActionButton.
Noch eine Bemerkung: FlyingButton erweitert Service und MaterialDesingDialog erweitert Aktivität. Das ist absichtlich. Im Allgemeinen möchte ich einen Button über alle Systemicons haben. Da MaterialDesingDialog nicht wie gewünscht funktioniert, habe ich die Aktivitätsklasse erweitert, da ich vermutete, dass das Problem darin besteht, den Dienst zu erweitern.
Ansicht Objekte
public class FlyingButton extends Service {
private WindowManager windowManager;
public Dialog dialog;
View layout,dialogLayout;
int ciekawyX, ciekawyY;
ImageView button1,button2,button3,button_cross;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
setTheme(R.style.AppTheme);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
layout = inflater.inflate(R.layout.activity_main, null);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.START;
params.x = 0;
params.y = 0;
windowManager.addView(layout, params);
try {
layout.setOnTouchListener(new View.OnTouchListener() {
private WindowManager.LayoutParams paramsF = params;
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
float move_X_axis,move_Y_axis;
@Override public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//Log.e("ACTION_DOWN","1");
initialX = paramsF.x;
initialY = paramsF.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
break;
case MotionEvent.ACTION_UP:
//Log.e("ACTION_UP","2");
if((move_X_axis < 0.1) && (move_Y_axis < 0.1) ) {
if (layout.getWindowToken() != null) {
//windowManager.removeView(layout);
Log.e(""+move_X_axis,""+move_Y_axis);
CustomDialog();
}
}
break;
case MotionEvent.ACTION_MOVE:
//Log.e("ACTION_MOVE","3");
paramsF.x = initialX + (int) (event.getRawX() - initialTouchX);
paramsF.y = initialY + (int) (event.getRawY() - initialTouchY);
windowManager.updateViewLayout(layout, paramsF);
move_X_axis = event.getRawX() - initialTouchX;
move_Y_axis = event.getRawY() - initialTouchY;
ciekawyX = paramsF.x;
ciekawyY = paramsF.y;
break;
}
return false;
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
@Override
public void onDestroy() {
super.onDestroy();
//if (chatHead != null) windowManager.removeView(chatHead);
}
public void CustomDialog(){
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
dialogLayout = inflater.inflate(R.layout.dialogbox, null);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.START;
params.x = ciekawyX;
params.y = ciekawyY;
if(layout.getWindowToken() != null) {
windowManager.removeView(layout);
//}
//if(dialogLayout.getWindowToken() != null){
windowManager.addView(dialogLayout, params);
}
button1 = (ImageView) dialogLayout.findViewById(R.id.button1);
button1.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v)
{
Log.e("BRAWO","KLIKNALES BUTTON1");
}
});
button2 = (ImageView) dialogLayout.findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v)
{
Log.e("BRAWO","KLIKNALES BUTTON2");
}
});
button3 = (ImageView) dialogLayout.findViewById(R.id.button3);
button3.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v)
{
Log.e("BRAWO","KLIKNALES BUTTON3");
}
});
button_cross = (ImageView) dialogLayout.findViewById(R.id.cross_button);
button_cross.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v)
{
if(dialogLayout.getWindowToken() != null) {
windowManager.removeView(dialogLayout);
//}
//if(dialogLayout.getWindowToken() != null){
windowManager.addView(layout, params);
}
}
});
}
}
FloatingActionButton
public class MaterialDesingDialog extends Activity{
FloatingActionMenu materialDesignFAM;
private WindowManager windowManager;
View inflatedMaterialDesignDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
inflatedMaterialDesignDialog = inflater.inflate(R.layout.material_design_dialogbox, null);
materialDesignFAM = (FloatingActionMenu) findViewById(R.id.material_design_android_floating_action_menu);
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.START;
params.x = 0;
params.y = 0;
windowManager.addView(inflatedMaterialDesignDialog, params);
try {
inflatedMaterialDesignDialog.setOnTouchListener(new View.OnTouchListener() {
private WindowManager.LayoutParams paramsF = params;
private int initialX;
private int initialY;
private float initialTouchX;
private float initialTouchY;
float move_X_axis,move_Y_axis;
@Override public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.e("ACTION_DOWN","1");
initialX = paramsF.x;
initialY = paramsF.y;
initialTouchX = event.getRawX();
initialTouchY = event.getRawY();
break;
case MotionEvent.ACTION_UP:
Log.e("ACTION_UP","2");
break;
case MotionEvent.ACTION_MOVE:
Log.e("ACTION_MOVE","3");
paramsF.x = initialX + (int) (event.getRawX() - initialTouchX);
paramsF.y = initialY + (int) (event.getRawY() - initialTouchY);
move_X_axis = event.getRawX() - initialTouchX;
move_Y_axis = event.getRawY() - initialTouchY;
windowManager.updateViewLayout(inflatedMaterialDesignDialog, paramsF);
break;
}
return false;
}
});
} catch (Exception e) {
// TODO: handle exception
}
}
}
Leider funktioniert deine Lösung nicht. Schaltfläche wird nicht angezeigt. Ich konnte auch Methoden nicht finden, die Sie auf Knopf setzen. Es ist: setProgress(), setColorNormal(), setColorPressed(), setColorRipple(). Diese können nicht gelöst werden. Vielleicht sprechen wir über verschiedene Floating Action Button? – Vojti
https://github.com/Clans/FloatingActionButton Ich habe diese schwebende Schaltfläche implementiert. Und ich habe festgestellt, dass auch in Ihrem Link dieser Button beschrieben ist. Hast du passende Abhängigkeiten hinzugefügt? –
Ja, ich habe es hinzugefügt. 'Abhängigkeiten { filetree (dir: 'libs', schließen ein: [ '* .jar']) kompilieren testCompile 'junit: junit: 4.12' Kompilierung‚com.android.support:appcompat-v7:23.1.0 ' kompilieren' com.android.support:design:23.1.0 ' kompilieren' com.github.clans: fab: 1.6.2 ' } ' – Vojti