Wassim Ben H.
- Forum-Beiträge: 3
01.06.2012, 16:39:29 via Website
01.06.2012 16:39:29 via Website
Hallo,
an sich wollte ich lediglich die SlidingDrawer Funktionalität dahingehend nachbauen, dass sie von links nach rechts aufgeht.
Standardmäßig klappt das ja nur von rechts nach links und von unten nach oben.
Wie dem auch sei - an sich hab ich das optisch hinbekommen:
Hier noch ein Auszug aus der Java Datei:
By the way - ich habe die Formatierung des Quelltextes nicht sauber einfügen können wie Ihr seht. Wusste echt nicht wie es besser geht. Ansonsten lade ich Quelltext in Zukunft
Viele Grüße!
an sich wollte ich lediglich die SlidingDrawer Funktionalität dahingehend nachbauen, dass sie von links nach rechts aufgeht.
Standardmäßig klappt das ja nur von rechts nach links und von unten nach oben.
Wie dem auch sei - an sich hab ich das optisch hinbekommen:
1<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="fill_parent"
3 android:layout_height="fill_parent"
4 android:background="@drawable/login_bg"
5 android:id="@+id/vg" >
6
7 <EditText
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello" android:textColor="#000000" />
11
12 <LinearLayout
13 android:id="@+id/panel"
14 android:layout_width="200dp"
15 android:layout_height="fill_parent"
16 android:orientation="horizontal" >
17 <LinearLayout
18 android:layout_height="fill_parent"
19 android:layout_width="290dp"
20 android:background="@drawable/slider_bg">
21
22 <Button
23 android:id="@+id/big_btn"
24 android:text="Test"
25 android:layout_width="60dp"
26 android:layout_height="30dp" />
27
28 </LinearLayout>
29 <LinearLayout
30 android:layout_height="fill_parent"
31 android:layout_width="30dp"
32 android:background="@android:color/transparent">
33
34 <ImageView
35 android:id="@+id/img"
36 android:layout_width="wrap_content"
37 android:layout_height="wrap_content"
38 android:src="@drawable/slider_tab"
39 android:layout_gravity="bottom"
40 android:paddingBottom="20dp" />
41 </LinearLayout>
42 </LinearLayout>
43</RelativeLayout>
2 android:layout_width="fill_parent"
3 android:layout_height="fill_parent"
4 android:background="@drawable/login_bg"
5 android:id="@+id/vg" >
6
7 <EditText
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:text="@string/hello" android:textColor="#000000" />
11
12 <LinearLayout
13 android:id="@+id/panel"
14 android:layout_width="200dp"
15 android:layout_height="fill_parent"
16 android:orientation="horizontal" >
17 <LinearLayout
18 android:layout_height="fill_parent"
19 android:layout_width="290dp"
20 android:background="@drawable/slider_bg">
21
22 <Button
23 android:id="@+id/big_btn"
24 android:text="Test"
25 android:layout_width="60dp"
26 android:layout_height="30dp" />
27
28 </LinearLayout>
29 <LinearLayout
30 android:layout_height="fill_parent"
31 android:layout_width="30dp"
32 android:background="@android:color/transparent">
33
34 <ImageView
35 android:id="@+id/img"
36 android:layout_width="wrap_content"
37 android:layout_height="wrap_content"
38 android:src="@drawable/slider_tab"
39 android:layout_gravity="bottom"
40 android:paddingBottom="20dp" />
41 </LinearLayout>
42 </LinearLayout>
43</RelativeLayout>
Hier noch ein Auszug aus der Java Datei:
1public void onCreate(Bundle savedInstanceState)
2{
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.main);
5
6 sp = (ViewGroup)findViewById(R.id.panel);
7
8 splp = new RelativeLayout.LayoutParams(
9 new ViewGroup.MarginLayoutParams(
10 RelativeLayout.LayoutParams.WRAP_CONTENT,
11 RelativeLayout.LayoutParams.FILL_PARENT));
12
13 splp.setMargins(-435, 0, 0, 0);
14 sp.setLayoutParams(splp);
15
16 sp.requestFocus();
17
18 moveLeftToRight = new TranslateAnimation(0, 435, 0, 0);
19 moveLeftToRight.setDuration(1000);
20 moveLeftToRight.setFillAfter(true);
21 moveLeftToRight.setAnimationListener(this);
22 moveLeftToRight.initialize(40, 119, 480, 762);
23
24 moveRightToLeft = new TranslateAnimation(435, 0, 0, 0);
25 moveRightToLeft.setDuration(1000);
26 moveRightToLeft.setFillAfter(true);
27 moveRightToLeft.setAnimationListener(this);
28
29 img = (ImageView)findViewById(R.id.img);
30 //Now add the touchListener on the ContainerGroup
31 ViewGroup vg = (ViewGroup)findViewById(R.id.vg);
32 vg.bringToFront();
33 vg.setOnTouchListener(new View.OnTouchListener()
34 {
35 @Override
36 public boolean onTouch(View v, MotionEvent event)
37 {
38 int imgX = img.getLeft();
39 int imgY = img.getTop()-50;
40
41 int xOffset = 400;
42 int imgXEnd = img.getLeft() + xOffset;
43
44
45 int imgW = img.getWidth();
46 int imgH = img.getHeight();
47
48 int imgXW = imgX + imgW;
49 int imgYH = imgY + imgH;
50
51 int x = (int)event.getX() - offset_x;
52 int y = (int)event.getY() - offset_y;
53
54 switch(event.getActionMasked())
55 {
56 case MotionEvent.ACTION_DOWN:
57
58 Log.i("Touch X", x + "");
59 Log.i("Touch Y", y + "");
60 Log.i("IMG POSITION X", imgX + "");
61 Log.i("IMG POSITION Y", imgY + "");
62 Log.i("IMG WIDTH", imgW + "");
63 Log.i("IMG HEIGHT", imgH + "");
64 Log.i("LEFT POS", "" );
65
66 img.getLayoutParams();
67
68 if(!animating)
69 {
70 if(!sliderIsOpen && (x>=imgX) && (x<=imgXW) && (y>=imgY) && (y<=imgYH))
71 {
72 animating = true;
73 sp.startAnimation(moveLeftToRight);
74 sliderIsOpen = true;
75 //startDragging = true;
76 }
77 else if(sliderIsOpen && (x>=imgXEnd) && (x<=imgXEnd + imgW) && (y>=imgY) && (y<=imgYH))
78 {
79 animating = true;
80 sp.startAnimation(moveRightToLeft);
81 sliderIsOpen = false;
82 }
83 else
84 {
85 startDragging = false;
86 }
87 }
88 break;
89 case MotionEvent.ACTION_UP:
90 if(startDragging)
91 {
92 startDragging = false;
93 }
94 default:
95 break;
96 }
97 return true;
98 }
99});
Von der Idee her lasse ich also die View mit dem größten Z Index in onCreate nach links verschieben, und bei Bedarf wird sie über die untere View nach rechts geschoben. Das klappt soweit auch recht gut. Nur wenn ich den Button auf der obersten View drücke, dann geht der Fokus durch die View auf den EditText der View darunter. Kann mir jemand einen Tipp geben wie - bei ausgeklappter View - nur Komponenten darin reagieren, und nicht die Komponenten der View darunter? 2{
3 super.onCreate(savedInstanceState);
4 setContentView(R.layout.main);
5
6 sp = (ViewGroup)findViewById(R.id.panel);
7
8 splp = new RelativeLayout.LayoutParams(
9 new ViewGroup.MarginLayoutParams(
10 RelativeLayout.LayoutParams.WRAP_CONTENT,
11 RelativeLayout.LayoutParams.FILL_PARENT));
12
13 splp.setMargins(-435, 0, 0, 0);
14 sp.setLayoutParams(splp);
15
16 sp.requestFocus();
17
18 moveLeftToRight = new TranslateAnimation(0, 435, 0, 0);
19 moveLeftToRight.setDuration(1000);
20 moveLeftToRight.setFillAfter(true);
21 moveLeftToRight.setAnimationListener(this);
22 moveLeftToRight.initialize(40, 119, 480, 762);
23
24 moveRightToLeft = new TranslateAnimation(435, 0, 0, 0);
25 moveRightToLeft.setDuration(1000);
26 moveRightToLeft.setFillAfter(true);
27 moveRightToLeft.setAnimationListener(this);
28
29 img = (ImageView)findViewById(R.id.img);
30 //Now add the touchListener on the ContainerGroup
31 ViewGroup vg = (ViewGroup)findViewById(R.id.vg);
32 vg.bringToFront();
33 vg.setOnTouchListener(new View.OnTouchListener()
34 {
35 @Override
36 public boolean onTouch(View v, MotionEvent event)
37 {
38 int imgX = img.getLeft();
39 int imgY = img.getTop()-50;
40
41 int xOffset = 400;
42 int imgXEnd = img.getLeft() + xOffset;
43
44
45 int imgW = img.getWidth();
46 int imgH = img.getHeight();
47
48 int imgXW = imgX + imgW;
49 int imgYH = imgY + imgH;
50
51 int x = (int)event.getX() - offset_x;
52 int y = (int)event.getY() - offset_y;
53
54 switch(event.getActionMasked())
55 {
56 case MotionEvent.ACTION_DOWN:
57
58 Log.i("Touch X", x + "");
59 Log.i("Touch Y", y + "");
60 Log.i("IMG POSITION X", imgX + "");
61 Log.i("IMG POSITION Y", imgY + "");
62 Log.i("IMG WIDTH", imgW + "");
63 Log.i("IMG HEIGHT", imgH + "");
64 Log.i("LEFT POS", "" );
65
66 img.getLayoutParams();
67
68 if(!animating)
69 {
70 if(!sliderIsOpen && (x>=imgX) && (x<=imgXW) && (y>=imgY) && (y<=imgYH))
71 {
72 animating = true;
73 sp.startAnimation(moveLeftToRight);
74 sliderIsOpen = true;
75 //startDragging = true;
76 }
77 else if(sliderIsOpen && (x>=imgXEnd) && (x<=imgXEnd + imgW) && (y>=imgY) && (y<=imgYH))
78 {
79 animating = true;
80 sp.startAnimation(moveRightToLeft);
81 sliderIsOpen = false;
82 }
83 else
84 {
85 startDragging = false;
86 }
87 }
88 break;
89 case MotionEvent.ACTION_UP:
90 if(startDragging)
91 {
92 startDragging = false;
93 }
94 default:
95 break;
96 }
97 return true;
98 }
99});
By the way - ich habe die Formatierung des Quelltextes nicht sauber einfügen können wie Ihr seht. Wusste echt nicht wie es besser geht. Ansonsten lade ich Quelltext in Zukunft
Viele Grüße!
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.