的
@@ -0,0 +1 @@
|
||||
/build
|
||||
@@ -0,0 +1,48 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:2.3.3'
|
||||
}
|
||||
}
|
||||
|
||||
repositories {
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 25
|
||||
buildToolsVersion "25.0.0"
|
||||
|
||||
defaultConfig {
|
||||
minSdkVersion 14
|
||||
targetSdkVersion 25
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFile getDefaultProguardFile('proguard-android-optimize.txt')
|
||||
}
|
||||
}
|
||||
|
||||
productFlavors {
|
||||
defaultFlavor {
|
||||
proguardFile 'proguard-rules.txt'
|
||||
}
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
compile files('libs/android-support-v4.jar')
|
||||
compile project(':AndroidCharts')
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# By default, the flags in this file are appended to flags specified
|
||||
# in /Applications/Android Studio.app/sdk/tools/proguard/proguard-android.txt
|
||||
# You can edit the include path and order by changing the ProGuard
|
||||
# include property in project.properties.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# Add any project specific keep options here:
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:versionCode="1"
|
||||
android:versionName="1.0"
|
||||
package="com.dacer.androidchartsexample">
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="14"
|
||||
android:targetSdkVersion="19"/>
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@drawable/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:theme="@style/AppTheme">
|
||||
<activity
|
||||
android:name="com.dacer.androidchartsexample.MainActivity"
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,46 @@
|
||||
package com.dacer.androidchartsexample;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import im.dacer.androidcharts.BarView;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Dacer on 11/15/13.
|
||||
*/
|
||||
public class BarFragment extends Fragment {
|
||||
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View rootView = inflater.inflate(R.layout.fragment_bar, container, false);
|
||||
final BarView barView = (BarView) rootView.findViewById(R.id.bar_view);
|
||||
Button button = (Button) rootView.findViewById(R.id.bar_button);
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override public void onClick(View view) {
|
||||
randomSet(barView);
|
||||
}
|
||||
});
|
||||
randomSet(barView);
|
||||
return rootView;
|
||||
}
|
||||
|
||||
private void randomSet(BarView barView) {
|
||||
int random = (int) (Math.random() * 20) + 6;
|
||||
ArrayList<String> test = new ArrayList<String>();
|
||||
for (int i = 0; i < random; i++) {
|
||||
test.add("test");
|
||||
test.add("pqg");
|
||||
// test.add(String.valueOf(i+1));
|
||||
}
|
||||
barView.setBottomTextList(test);
|
||||
|
||||
ArrayList<Integer> barDataList = new ArrayList<Integer>();
|
||||
for (int i = 0; i < random * 2; i++) {
|
||||
barDataList.add((int) (Math.random() * 100));
|
||||
}
|
||||
barView.setDataList(barDataList, 100);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.dacer.androidchartsexample;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import im.dacer.androidcharts.ClockPieHelper;
|
||||
import im.dacer.androidcharts.ClockPieView;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Dacer on 11/16/13.
|
||||
*/
|
||||
public class ClockPieFragment extends Fragment {
|
||||
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View rootView = inflater.inflate(R.layout.fragment_pie, container, false);
|
||||
final ClockPieView clockPieView = (ClockPieView) rootView.findViewById(R.id.pie_view);
|
||||
Button button = (Button) rootView.findViewById(R.id.pie_button);
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override public void onClick(View view) {
|
||||
randomSet(clockPieView);
|
||||
}
|
||||
});
|
||||
set(clockPieView);
|
||||
return rootView;
|
||||
}
|
||||
|
||||
private void randomSet(ClockPieView clockPieView) {
|
||||
ArrayList<ClockPieHelper> clockPieHelperArrayList = new ArrayList<ClockPieHelper>();
|
||||
for (int i = 0; i < 20; i++) {
|
||||
int startHour = (int) (24 * Math.random());
|
||||
int startMin = (int) (60 * Math.random());
|
||||
int duration = (int) (50 * Math.random());
|
||||
clockPieHelperArrayList.add(
|
||||
new ClockPieHelper(startHour, startMin, 0, startHour, startMin + duration, 0));
|
||||
}
|
||||
clockPieView.setDate(clockPieHelperArrayList);
|
||||
}
|
||||
|
||||
private void set(ClockPieView clockPieView) {
|
||||
ArrayList<ClockPieHelper> clockPieHelperArrayList = new ArrayList<ClockPieHelper>();
|
||||
clockPieHelperArrayList.add(new ClockPieHelper(1, 50, 2, 30));
|
||||
clockPieHelperArrayList.add(new ClockPieHelper(6, 50, 8, 30));
|
||||
clockPieView.setDate(clockPieHelperArrayList);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
package com.dacer.androidchartsexample;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import im.dacer.androidcharts.LineView;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Dacer on 11/15/13.
|
||||
*/
|
||||
public class LineFragment extends Fragment {
|
||||
int randomint = 9;
|
||||
|
||||
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View rootView = inflater.inflate(R.layout.fragment_line, container, false);
|
||||
final LineView lineView = (LineView) rootView.findViewById(R.id.line_view);
|
||||
final LineView lineViewFloat = (LineView) rootView.findViewById(R.id.line_view_float);
|
||||
|
||||
initLineView(lineView);
|
||||
initLineView(lineViewFloat);
|
||||
Button lineButton = (Button) rootView.findViewById(R.id.line_button);
|
||||
lineButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override public void onClick(View view) {
|
||||
randomSet(lineView, lineViewFloat);
|
||||
}
|
||||
});
|
||||
|
||||
randomSet(lineView, lineViewFloat);
|
||||
return rootView;
|
||||
}
|
||||
|
||||
private void initLineView(LineView lineView) {
|
||||
ArrayList<String> test = new ArrayList<String>();
|
||||
for (int i = 0; i < randomint; i++) {
|
||||
test.add(String.valueOf(i + 1));
|
||||
}
|
||||
lineView.setBottomTextList(test);
|
||||
lineView.setColorArray(new int[] {
|
||||
Color.parseColor("#F44336"), Color.parseColor("#9C27B0"),
|
||||
Color.parseColor("#2196F3"), Color.parseColor("#009688")
|
||||
});
|
||||
lineView.setDrawDotLine(true);
|
||||
lineView.setShowPopup(LineView.SHOW_POPUPS_NONE);
|
||||
}
|
||||
|
||||
private void randomSet(LineView lineView, LineView lineViewFloat) {
|
||||
ArrayList<Integer> dataList = new ArrayList<>();
|
||||
float random = (float) (Math.random() * 9 + 1);
|
||||
for (int i = 0; i < randomint; i++) {
|
||||
dataList.add((int) (Math.random() * random));
|
||||
}
|
||||
|
||||
ArrayList<Integer> dataList2 = new ArrayList<>();
|
||||
random = (int) (Math.random() * 9 + 1);
|
||||
for (int i = 0; i < randomint; i++) {
|
||||
dataList2.add((int) (Math.random() * random));
|
||||
}
|
||||
|
||||
ArrayList<Integer> dataList3 = new ArrayList<>();
|
||||
random = (int) (Math.random() * 9 + 1);
|
||||
for (int i = 0; i < randomint; i++) {
|
||||
dataList3.add((int) (Math.random() * random));
|
||||
}
|
||||
|
||||
ArrayList<ArrayList<Integer>> dataLists = new ArrayList<>();
|
||||
dataLists.add(dataList);
|
||||
dataLists.add(dataList2);
|
||||
dataLists.add(dataList3);
|
||||
|
||||
lineView.setDataList(dataLists);
|
||||
|
||||
ArrayList<Float> dataListF = new ArrayList<>();
|
||||
float randomF = (float) (Math.random() * 9 + 1);
|
||||
for (int i = 0; i < randomint; i++) {
|
||||
dataListF.add((float) (Math.random() * randomF));
|
||||
}
|
||||
|
||||
ArrayList<Float> dataListF2 = new ArrayList<>();
|
||||
randomF = (int) (Math.random() * 9 + 1);
|
||||
for (int i = 0; i < randomint; i++) {
|
||||
dataListF2.add((float) (Math.random() * randomF));
|
||||
}
|
||||
|
||||
ArrayList<Float> dataListF3 = new ArrayList<>();
|
||||
randomF = (int) (Math.random() * 9 + 1);
|
||||
for (int i = 0; i < randomint; i++) {
|
||||
dataListF3.add((float) (Math.random() * randomF));
|
||||
}
|
||||
|
||||
ArrayList<ArrayList<Float>> dataListFs = new ArrayList<>();
|
||||
dataListFs.add(dataListF);
|
||||
dataListFs.add(dataListF2);
|
||||
dataListFs.add(dataListF3);
|
||||
|
||||
lineViewFloat.setFloatDataList(dataListFs);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.dacer.androidchartsexample;
|
||||
|
||||
import android.app.ActionBar;
|
||||
import android.app.Activity;
|
||||
import android.app.FragmentManager;
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
|
||||
;
|
||||
|
||||
public class MainActivity extends Activity
|
||||
implements NavigationDrawerFragment.NavigationDrawerCallbacks {
|
||||
|
||||
/**
|
||||
* Fragment managing the behaviors, interactions and presentation of the navigation drawer.
|
||||
*/
|
||||
private NavigationDrawerFragment mNavigationDrawerFragment;
|
||||
|
||||
/**
|
||||
* Used to store the last screen title. For use in {@link #restoreActionBar()}.
|
||||
*/
|
||||
private CharSequence mTitle;
|
||||
|
||||
@Override protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.activity_main);
|
||||
|
||||
mNavigationDrawerFragment =
|
||||
(NavigationDrawerFragment) getFragmentManager().findFragmentById(
|
||||
R.id.navigation_drawer);
|
||||
mTitle = getTitle();
|
||||
|
||||
// Set up the drawer.
|
||||
mNavigationDrawerFragment.setUp(R.id.navigation_drawer,
|
||||
(DrawerLayout) findViewById(R.id.drawer_layout));
|
||||
}
|
||||
|
||||
@Override public void onNavigationDrawerItemSelected(int position) {
|
||||
// update the main content by replacing fragments
|
||||
FragmentManager fragmentManager = getFragmentManager();
|
||||
switch (position) {
|
||||
case 0:
|
||||
fragmentManager.beginTransaction()
|
||||
.replace(R.id.container, new LineFragment())
|
||||
.commit();
|
||||
break;
|
||||
case 1:
|
||||
fragmentManager.beginTransaction()
|
||||
.replace(R.id.container, new BarFragment())
|
||||
.commit();
|
||||
break;
|
||||
case 2:
|
||||
fragmentManager.beginTransaction()
|
||||
.replace(R.id.container, new ClockPieFragment())
|
||||
.commit();
|
||||
break;
|
||||
case 3:
|
||||
fragmentManager.beginTransaction()
|
||||
.replace(R.id.container, new PieFragment())
|
||||
.commit();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void onSectionAttached(int number) {
|
||||
switch (number) {
|
||||
case 1:
|
||||
mTitle = getString(R.string.title_section1);
|
||||
break;
|
||||
case 2:
|
||||
mTitle = getString(R.string.title_section2);
|
||||
break;
|
||||
case 3:
|
||||
mTitle = getString(R.string.title_section3);
|
||||
break;
|
||||
case 4:
|
||||
mTitle = getString(R.string.title_section4);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public void restoreActionBar() {
|
||||
ActionBar actionBar = getActionBar();
|
||||
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
|
||||
actionBar.setDisplayShowTitleEnabled(true);
|
||||
actionBar.setTitle(mTitle);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
package com.dacer.androidchartsexample;
|
||||
|
||||
import android.app.ActionBar;
|
||||
import android.app.Activity;
|
||||
import android.app.Fragment;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.support.v4.app.ActionBarDrawerToggle;
|
||||
import android.support.v4.view.GravityCompat;
|
||||
import android.support.v4.widget.DrawerLayout;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ListView;
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
* Fragment used for managing interactions for and presentation of a navigation drawer.
|
||||
* See the <a href="https://developer.android.com/design/patterns/navigation-drawer.html#Interaction">
|
||||
* design guidelines</a> for a complete explanation of the behaviors implemented here.
|
||||
*/
|
||||
public class NavigationDrawerFragment extends Fragment {
|
||||
|
||||
/**
|
||||
* Remember the position of the selected item.
|
||||
*/
|
||||
private static final String STATE_SELECTED_POSITION = "selected_navigation_drawer_position";
|
||||
|
||||
/**
|
||||
* Per the design guidelines, you should show the drawer on launch until the user manually
|
||||
* expands it. This shared preference tracks this.
|
||||
*/
|
||||
private static final String PREF_USER_LEARNED_DRAWER = "navigation_drawer_learned";
|
||||
|
||||
/**
|
||||
* A pointer to the current callbacks instance (the Activity).
|
||||
*/
|
||||
private NavigationDrawerCallbacks mCallbacks;
|
||||
|
||||
/**
|
||||
* Helper component that ties the action bar to the navigation drawer.
|
||||
*/
|
||||
private ActionBarDrawerToggle mDrawerToggle;
|
||||
|
||||
private DrawerLayout mDrawerLayout;
|
||||
private ListView mDrawerListView;
|
||||
private View mFragmentContainerView;
|
||||
|
||||
private int mCurrentSelectedPosition = 0;
|
||||
private boolean mFromSavedInstanceState;
|
||||
private boolean mUserLearnedDrawer;
|
||||
|
||||
public NavigationDrawerFragment() {
|
||||
}
|
||||
|
||||
@Override public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
// Read in the flag indicating whether or not the user has demonstrated awareness of the
|
||||
// drawer. See PREF_USER_LEARNED_DRAWER for details.
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
mUserLearnedDrawer = sp.getBoolean(PREF_USER_LEARNED_DRAWER, false);
|
||||
|
||||
if (savedInstanceState != null) {
|
||||
mCurrentSelectedPosition = savedInstanceState.getInt(STATE_SELECTED_POSITION);
|
||||
mFromSavedInstanceState = true;
|
||||
}
|
||||
|
||||
// Select either the default item (0) or the last selected item.
|
||||
selectItem(mCurrentSelectedPosition);
|
||||
}
|
||||
|
||||
@Override public void onActivityCreated(Bundle savedInstanceState) {
|
||||
super.onActivityCreated(savedInstanceState);
|
||||
// Indicate that this fragment would like to influence the set of actions in the action bar.
|
||||
setHasOptionsMenu(true);
|
||||
}
|
||||
|
||||
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
mDrawerListView =
|
||||
(ListView) inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
|
||||
mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
||||
selectItem(position);
|
||||
}
|
||||
});
|
||||
mDrawerListView.setAdapter(new ArrayAdapter<String>(getActionBar().getThemedContext(),
|
||||
android.R.layout.simple_list_item_activated_1, android.R.id.text1, new String[] {
|
||||
getString(R.string.title_section1), getString(R.string.title_section2),
|
||||
getString(R.string.title_section3), getString(R.string.title_section4)
|
||||
}));
|
||||
mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
|
||||
return mDrawerListView;
|
||||
}
|
||||
|
||||
public boolean isDrawerOpen() {
|
||||
return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(mFragmentContainerView);
|
||||
}
|
||||
|
||||
/**
|
||||
* Users of this fragment must call this method to set up the navigation drawer interactions.
|
||||
*
|
||||
* @param fragmentId The android:id of this fragment in its activity's layout.
|
||||
* @param drawerLayout The DrawerLayout containing this fragment's UI.
|
||||
*/
|
||||
public void setUp(int fragmentId, DrawerLayout drawerLayout) {
|
||||
mFragmentContainerView = getActivity().findViewById(fragmentId);
|
||||
mDrawerLayout = drawerLayout;
|
||||
|
||||
// set a custom shadow that overlays the main content when the drawer opens
|
||||
mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
|
||||
// set up the drawer's list view with items and click listener
|
||||
|
||||
ActionBar actionBar = getActionBar();
|
||||
actionBar.setDisplayHomeAsUpEnabled(true);
|
||||
actionBar.setHomeButtonEnabled(true);
|
||||
|
||||
// ActionBarDrawerToggle ties together the the proper interactions
|
||||
// between the navigation drawer and the action bar app icon.
|
||||
mDrawerToggle =
|
||||
new ActionBarDrawerToggle(getActivity(), /* host Activity */
|
||||
mDrawerLayout, /* DrawerLayout object */
|
||||
R.drawable.ic_drawer, /* nav drawer image to replace 'Up' caret */
|
||||
R.string.navigation_drawer_open, /* "open drawer" description for accessibility */
|
||||
R.string.navigation_drawer_close /* "close drawer" description for accessibility */) {
|
||||
@Override public void onDrawerClosed(View drawerView) {
|
||||
super.onDrawerClosed(drawerView);
|
||||
if (!isAdded()) {
|
||||
return;
|
||||
}
|
||||
|
||||
getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
|
||||
}
|
||||
|
||||
@Override public void onDrawerOpened(View drawerView) {
|
||||
super.onDrawerOpened(drawerView);
|
||||
if (!isAdded()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mUserLearnedDrawer) {
|
||||
// The user manually opened the drawer; store this flag to prevent auto-showing
|
||||
// the navigation drawer automatically in the future.
|
||||
mUserLearnedDrawer = true;
|
||||
SharedPreferences sp =
|
||||
PreferenceManager.getDefaultSharedPreferences(getActivity());
|
||||
sp.edit().putBoolean(PREF_USER_LEARNED_DRAWER, true).apply();
|
||||
}
|
||||
|
||||
getActivity().invalidateOptionsMenu(); // calls onPrepareOptionsMenu()
|
||||
}
|
||||
};
|
||||
|
||||
// If the user hasn't 'learned' about the drawer, open it to introduce them to the drawer,
|
||||
// per the navigation drawer design guidelines.
|
||||
if (!mUserLearnedDrawer && !mFromSavedInstanceState) {
|
||||
mDrawerLayout.openDrawer(mFragmentContainerView);
|
||||
}
|
||||
|
||||
// Defer code dependent on restoration of previous instance state.
|
||||
mDrawerLayout.post(new Runnable() {
|
||||
@Override public void run() {
|
||||
mDrawerToggle.syncState();
|
||||
}
|
||||
});
|
||||
|
||||
mDrawerLayout.setDrawerListener(mDrawerToggle);
|
||||
}
|
||||
|
||||
private void selectItem(int position) {
|
||||
mCurrentSelectedPosition = position;
|
||||
if (mDrawerListView != null) {
|
||||
mDrawerListView.setItemChecked(position, true);
|
||||
}
|
||||
if (mDrawerLayout != null) {
|
||||
mDrawerLayout.closeDrawer(mFragmentContainerView);
|
||||
}
|
||||
if (mCallbacks != null) {
|
||||
mCallbacks.onNavigationDrawerItemSelected(position);
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onAttach(Activity activity) {
|
||||
super.onAttach(activity);
|
||||
try {
|
||||
mCallbacks = (NavigationDrawerCallbacks) activity;
|
||||
} catch (ClassCastException e) {
|
||||
throw new ClassCastException("Activity must implement NavigationDrawerCallbacks.");
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void onDetach() {
|
||||
super.onDetach();
|
||||
mCallbacks = null;
|
||||
}
|
||||
|
||||
@Override public void onSaveInstanceState(Bundle outState) {
|
||||
super.onSaveInstanceState(outState);
|
||||
outState.putInt(STATE_SELECTED_POSITION, mCurrentSelectedPosition);
|
||||
}
|
||||
|
||||
@Override public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
// Forward the new configuration the drawer toggle component.
|
||||
mDrawerToggle.onConfigurationChanged(newConfig);
|
||||
}
|
||||
|
||||
@Override public boolean onOptionsItemSelected(MenuItem item) {
|
||||
if (mDrawerToggle.onOptionsItemSelected(item)) {
|
||||
return true;
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
/**
|
||||
* Per the navigation drawer design guidelines, updates the action bar to show the global app
|
||||
* 'context', rather than just what's in the current screen.
|
||||
*/
|
||||
private void showGlobalContextActionBar() {
|
||||
ActionBar actionBar = getActionBar();
|
||||
actionBar.setDisplayShowTitleEnabled(true);
|
||||
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
|
||||
actionBar.setTitle(R.string.app_name);
|
||||
}
|
||||
|
||||
private ActionBar getActionBar() {
|
||||
return getActivity().getActionBar();
|
||||
}
|
||||
|
||||
/**
|
||||
* Callbacks interface that all activities using this fragment must implement.
|
||||
*/
|
||||
public static interface NavigationDrawerCallbacks {
|
||||
/**
|
||||
* Called when an item in the navigation drawer is selected.
|
||||
*/
|
||||
void onNavigationDrawerItemSelected(int position);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
package com.dacer.androidchartsexample;
|
||||
|
||||
import android.app.Fragment;
|
||||
import android.graphics.Color;
|
||||
import android.os.Bundle;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.TextView;
|
||||
import im.dacer.androidcharts.PieHelper;
|
||||
import im.dacer.androidcharts.PieView;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Created by Dacer on 11/16/13.
|
||||
*/
|
||||
public class PieFragment extends Fragment {
|
||||
private TextView textView;
|
||||
|
||||
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
View rootView = inflater.inflate(R.layout.fragment_pie_s, container, false);
|
||||
textView = (TextView) rootView.findViewById(R.id.textView);
|
||||
final PieView pieView = (PieView) rootView.findViewById(R.id.pie_view);
|
||||
Button button = (Button) rootView.findViewById(R.id.pie_button);
|
||||
button.setOnClickListener(new View.OnClickListener() {
|
||||
@Override public void onClick(View view) {
|
||||
randomSet(pieView);
|
||||
}
|
||||
});
|
||||
set(pieView);
|
||||
return rootView;
|
||||
}
|
||||
|
||||
private void randomSet(PieView pieView) {
|
||||
ArrayList<PieHelper> pieHelperArrayList = new ArrayList<PieHelper>();
|
||||
ArrayList<Integer> intList = new ArrayList<Integer>();
|
||||
int totalNum = (int) (5 * Math.random()) + 5;
|
||||
|
||||
int totalInt = 0;
|
||||
for (int i = 0; i < totalNum; i++) {
|
||||
int ranInt = (int) (Math.random() * 10) + 1;
|
||||
intList.add(ranInt);
|
||||
totalInt += ranInt;
|
||||
}
|
||||
for (int i = 0; i < totalNum; i++) {
|
||||
pieHelperArrayList.add(new PieHelper(100f * intList.get(i) / totalInt));
|
||||
}
|
||||
|
||||
pieView.selectedPie(PieView.NO_SELECTED_INDEX);
|
||||
pieView.showPercentLabel(true);
|
||||
pieView.setDate(pieHelperArrayList);
|
||||
}
|
||||
|
||||
private void set(PieView pieView) {
|
||||
ArrayList<PieHelper> pieHelperArrayList = new ArrayList<PieHelper>();
|
||||
pieHelperArrayList.add(new PieHelper(20, Color.BLACK));
|
||||
pieHelperArrayList.add(new PieHelper(6));
|
||||
pieHelperArrayList.add(new PieHelper(30));
|
||||
pieHelperArrayList.add(new PieHelper(12));
|
||||
pieHelperArrayList.add(new PieHelper(32));
|
||||
|
||||
pieView.setDate(pieHelperArrayList);
|
||||
pieView.setOnPieClickListener(new PieView.OnPieClickListener() {
|
||||
@Override public void onPieClick(int index) {
|
||||
if (index != PieView.NO_SELECTED_INDEX) {
|
||||
textView.setText(index + " selected");
|
||||
} else {
|
||||
textView.setText("No selected pie");
|
||||
}
|
||||
}
|
||||
});
|
||||
pieView.selectedPie(2);
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 161 B |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 142 B |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 174 B |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 202 B |
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,34 @@
|
||||
<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. -->
|
||||
<android.support.v4.widget.DrawerLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:id="@+id/drawer_layout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity"
|
||||
>
|
||||
|
||||
<!-- As the main content view, the view below consumes the entire
|
||||
space available using match_parent in both dimensions. -->
|
||||
<FrameLayout
|
||||
android:id="@+id/container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
/>
|
||||
|
||||
<!-- android:layout_gravity="start" tells DrawerLayout to treat
|
||||
this as a sliding drawer on the left side for left-to-right
|
||||
languages and on the right side for right-to-left languages.
|
||||
If you're not building against API 17 or higher, use
|
||||
android:layout_gravity="left" instead. -->
|
||||
<!-- The drawer is given a fixed width in dp and extends the full height of
|
||||
the container. -->
|
||||
<fragment
|
||||
android:id="@+id/navigation_drawer"
|
||||
android:name="com.dacer.androidchartsexample.NavigationDrawerFragment"
|
||||
android:layout_width="@dimen/navigation_drawer_width"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_gravity="start"
|
||||
/>
|
||||
|
||||
</android.support.v4.widget.DrawerLayout>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#ffffff"
|
||||
>
|
||||
|
||||
<HorizontalScrollView
|
||||
android:id="@+id/horizontalScrollView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
>
|
||||
<view
|
||||
class="im.dacer.androidcharts.BarView"
|
||||
android:id="@+id/bar_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="300dp"
|
||||
/>
|
||||
</HorizontalScrollView>
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/bar_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:text="Random"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,46 @@
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#ffffff"
|
||||
>
|
||||
|
||||
<HorizontalScrollView
|
||||
android:id="@+id/horizontalScrollViewFloat"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@+id/horizontalScrollView"
|
||||
android:layout_alignParentRight="true"
|
||||
>
|
||||
<view
|
||||
class="im.dacer.androidcharts.LineView"
|
||||
android:id="@+id/line_view_float"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="200dp"
|
||||
/>
|
||||
</HorizontalScrollView>
|
||||
|
||||
<HorizontalScrollView
|
||||
android:id="@+id/horizontalScrollView"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@+id/line_button"
|
||||
android:layout_alignParentRight="true"
|
||||
>
|
||||
<view
|
||||
class="im.dacer.androidcharts.LineView"
|
||||
android:id="@+id/line_view"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="200dp"
|
||||
/>
|
||||
</HorizontalScrollView>
|
||||
|
||||
<Button
|
||||
android:id="@+id/line_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:text="Random"
|
||||
/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,10 @@
|
||||
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#000000"
|
||||
android:choiceMode="singleChoice"
|
||||
android:divider="@android:color/transparent"
|
||||
android:dividerHeight="0dp"
|
||||
tools:context="com.dacer.androidchartsexample.NavigationDrawerFragment"
|
||||
/>
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#ffffff"
|
||||
>
|
||||
|
||||
<view
|
||||
class="im.dacer.androidcharts.ClockPieView"
|
||||
android:id="@+id/pie_view"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
/>
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/pie_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:text="Random"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,38 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="#ffffff"
|
||||
>
|
||||
|
||||
<view
|
||||
class="im.dacer.androidcharts.PieView"
|
||||
android:id="@+id/pie_view"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentTop="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_margin="10dp"
|
||||
/>
|
||||
|
||||
|
||||
<Button
|
||||
android:id="@+id/pie_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:text="Random"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/textView"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@+id/pie_button"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:text="New Text"
|
||||
/>
|
||||
|
||||
</RelativeLayout>
|
||||
@@ -0,0 +1,6 @@
|
||||
<resources>
|
||||
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
|
||||
(such as screen margins) for screens with more than 820dp of available width. This
|
||||
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
|
||||
<dimen name="activity_horizontal_margin">64dp</dimen>
|
||||
</resources>
|
||||
@@ -0,0 +1,9 @@
|
||||
<resources>
|
||||
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||
|
||||
<!-- Per the design guidelines, navigation drawers should be between 240dp and 320dp:
|
||||
https://developer.android.com/design/patterns/navigation-drawer.html -->
|
||||
<dimen name="navigation_drawer_width">240dp</dimen>
|
||||
</resources>
|
||||
@@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
|
||||
<string name="app_name">AndroidChartsExample</string>
|
||||
<string name="title_section1">Line Chart</string>
|
||||
<string name="title_section2">Bar Chart</string>
|
||||
<string name="title_section3">Clock Pie View</string>
|
||||
<string name="title_section4">Pie Chart</string>
|
||||
<string name="navigation_drawer_open">Open navigation drawer</string>
|
||||
<string name="navigation_drawer_close">Close navigation drawer</string>
|
||||
|
||||
</resources>
|
||||
@@ -0,0 +1,8 @@
|
||||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
</style>
|
||||
|
||||
</resources>
|
||||