Vidar Vestnes Vidar Vestnes - 2 months ago 10
Android Question

How to change icon on the SlidingDrawer handle when clicked

Im trying to change the icon on the handle when i try to open the slidingdrawer.
When I extract the handle from the view and sets the onclicklistener or ontouchlistener it seems to never get trigget.

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

SlidingDrawer drawer = (SlidingDrawer)findViewById(R.id.drawer_landscape);

ImageView handle = (ImageView)findViewById(R.id.handle_l);
handle.setFocusable(true);

handle.setOnClickListener(new OnClickListener(){


@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.i("test","onClick");
}

});


}


And my XML

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/base_frame_layout"
android:layout_gravity="bottom"
>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>

<SlidingDrawer
android:id="@+id/drawer_landscape"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:handle="@+id/handle_l"
android:content="@+id/content"
android:orientation="vertical"
android:visibility="visible"
>

<ImageView
android:id="@+id/handle_l"
android:layout_height="50px"
android:layout_width="64px"
android:padding="0px"
android:src="@drawable/icon"
/>

<TextView
android:id="@+id/content"
android:text="content"
android:layout_height="50px"
android:layout_width="64px"
/>

</SlidingDrawer>

</FrameLayout>


I was hoping this code should log "onClick" message, but it doesn't.

Any ideas?

Answer

I found it, it was pritty easy... I just need to setOnDrawerScrollListener on my drawer.

than implement the 2 methods onScrollEnded and onScrollStarted.

    mSlidingDrawer.setOnDrawerScrollListener(new OnDrawerScrollListener(){

		@Override
		public void onScrollEnded() {
			// TODO Auto-generated method stub
			Log.i("ddd","onScrollEnded slider");
			slider_animation.reverseTransition(HANDLE_ANIMATION_SPEED);
		}

		@Override
		public void onScrollStarted() {
			// TODO Auto-generated method stub
			Log.i("ddd","onScrollStarted slider");
			slider_animation.startTransition(HANDLE_ANIMATION_SPEED);
		}

});

I rather use an animation on the handle instead of changing the Image bacause of the flickering.