Draggable Panel is an Android library created to build a draggable user interface similar to the new YouTube draggable video component based on Fragments or Views.
This Android library offers you two main classes to use and create your own awesome user interfaces. If you want to use it with fragments add
DraggablePanel
to your layout. If you want to use it with views useDraggableView
and put your views inside.
This new component has been created using some concepts described on Flavien Laurent Blog and Denevell Blog.
To create this library I've used an Android component called ViewDragHelper and ViewDragHelper.Calback. This component doesn't have too much documentation and that's the reason why I've added some javadoc to my code in order to clarify the component usage.
This library works on Android 4.X because the scale effect is not going to work properly when the user try to drag the view. The clickable zone on a scaled view in Android 2.X is bigger than the real scaled zone.
Usage
To use Draggable Panel library and get your new awesome UI working you can use two different Android widgets:
- 1. Add
DraggablePanel
widget to your layout. Configure the view customization elements using styleable attributes or programatically and configure your fragments to work as top or bottom fragment inside theDraggablePanel
widget.
<com.github.pedrovgs.DraggablePanel
android:id="@+id/draggable_panel"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
private void initializeDraggablePanel() throws Resources.NotFoundException {
draggablePanel.setFragmentManager(getSupportFragmentManager());
draggablePanel.setTopFragment(placeFragment);
draggablePanel.setBottomFragment(mapFragment);
draggablePanel.initializeView();
}
- 2. Add
DraggableView
widget to your layout. Configure the view to use two children views as the draggable view and the second view. Configure the customization elements using styleable attributes or programatically.
<com.github.pedrovgs.DraggableView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:draggable_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/draggable_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
draggable_view:top_view_id="@+id/iv_fan_art"
draggable_view:bottom_view_id="@+id/lv_episodes"
draggable_view:top_view_x_scale_factor="@dimen/x_scale_factor"
draggable_view:top_view_y_scale_factor="@dimen/y_scale_factor"
draggable_view:top_view_margin_right="@dimen/top_fragment_margin"
draggable_view:top_view_margin_bottom="@dimen/top_fragment_margin"
android:background="@color/black">
<!-- ListView Episodes -->
<ListView
android:id="@+id/lv_episodes"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/iv_fan_art"
style="@style/episodes_list_view"/>
<!-- TvShow Fan Art -->
<ImageView
android:id="@+id/iv_fan_art"
android:layout_width="fill_parent"
android:layout_height="@dimen/tv_show_fan_art_height"
android:layout_alignParentTop="true"
style="@style/image_view"/>
</com.github.pedrovgs.DraggableView>
Import DraggablePanel dependency
Download the project, compile it using maven or gradle and import
draggablepanel-1.0.2.aar
into your project.
Or declare it into your pom.xml. This library uses NineOldAndroid library and Android support library v4 version 19.1.0, you have to provide this dependencies from your local artifact repository or from maven central repository.
<dependency>
<groupId>com.github.pedrovgs</groupId>
<artifactId>draggablepanel</artifactId>
<version>1.0.2</version>
<type>aar</type>
</dependency>
Or into your build.gradle
dependencies {
compile 'com.github.pedrovgs:draggablepanel:1.0.2@aar'
compile 'com.android.support:support-v4:19.1.+'
compile 'com.nineoldandroids:library:2.4.+'
}
Customization
You can customize some of the view effects programatically or using xml styleable attributes. The elements to customize are:
- Draggable view / fragment height.
- Draggable view X scale factor.
- Draggable view Y scale factor.
- Draggable view margin right applied when the view is minimized.
- Draggable view margin bottom applied when the view is minimized.
- Enable or disable the horizontal alpha effect applied while the view is being horizontally dragged.
<com.github.pedrovgs.DraggableView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:draggable_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/draggable_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
draggable_view:top_view_id="@+id/iv_fan_art"
draggable_view:bottom_view_id="@+id/lv_episodes"
draggable_view:top_view_x_scale_factor="@dimen/x_scale_factor"
draggable_view:top_view_y_scale_factor="@dimen/y_scale_factor"
draggable_view:top_view_margin_right="@dimen/top_fragment_margin"
draggable_view:top_view_margin_bottom="@dimen/top_fragment_margin"
android:background="@color/black">
<!-- ....... -->
</com.github.pedrovgs.DraggableView>
draggablePanel.setTopFragment(placeFragment);
draggablePanel.setBottomFragment(mapFragment);
draggablePanel.setXScaleFactor(xScaleFactor);
draggablePanel.setYScaleFactor(yScaleFactor);
draggablePanel.setTopViewHeight(topViewHeight);
draggablePanel.setTopFragmentMarginRight(topViewMarginRight);
draggablePanel.setTopFragmentMarginBottom(topViewMargnBottom);
Similar customizable attributes are available programatically or using styleable attributes in
DraggableView
.Libraries used on the sample project
Click here to download this project.
No comments:
Post a Comment