diff --git a/app/build.gradle b/app/build.gradle index 924e79c..ced6751 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,13 +1,13 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 22 - buildToolsVersion "20.0.0" + compileSdkVersion 23 + buildToolsVersion "23.0.1" defaultConfig { applicationId "com.saulmm.material.myapplication" minSdkVersion 21 - targetSdkVersion 22 + targetSdkVersion 23 versionCode 1 versionName "1.0" } @@ -16,7 +16,9 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) - compile 'com.android.support:cardview-v7:21.0.0' - compile 'com.android.support:appcompat-v7:22.0.0' - compile 'com.android.support:support-v4:22.0.0' + compile 'com.android.support:design:23.0.1' + compile 'com.android.support:appcompat-v7:23.0.1' + compile 'com.android.support:cardview-v7:23.0.1' + compile 'com.android.support:recyclerview-v7:23.0.1' + } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2ebe7f2..aeec03d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,42 +1,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/saulmm/material/activities/CardsActivity.java b/app/src/main/java/com/saulmm/material/activities/CardsActivity.java new file mode 100644 index 0000000..5dac771 --- /dev/null +++ b/app/src/main/java/com/saulmm/material/activities/CardsActivity.java @@ -0,0 +1,91 @@ +package com.saulmm.material.activities; + +import android.animation.Animator; +import android.animation.AnimatorListenerAdapter; +import android.animation.ValueAnimator; +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v7.app.AppCompatActivity; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewTreeObserver; +import com.saulmm.material.R; + +public class CardsActivity extends AppCompatActivity implements View.OnClickListener { + private View mActionViewPrimary; + private View mActionViewSecondary; + private View mContentView; + private int mContentViewHeight; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.fragment_cards); + + mContentView = findViewById(R.id.view_card_raw_content); + mActionViewPrimary = findViewById(R.id.view_card_raw_action_primary); + mActionViewSecondary = findViewById(R.id.view_card_raw_action_secondary); + mActionViewSecondary.setOnClickListener(this); + mActionViewPrimary.setOnClickListener(this); + + mContentView.getViewTreeObserver().addOnPreDrawListener( + new ViewTreeObserver.OnPreDrawListener() { + @Override public boolean onPreDraw() { + mContentView.getViewTreeObserver().removeOnPreDrawListener(this); + + final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + + mContentView.measure(widthSpec, heightSpec); + mContentViewHeight = mContentView.getHeight(); + mContentView.setVisibility(View.GONE); + + return true; + } + }); + } + + @Override + public void onClick(View v) { + if (v.getId() == R.id.view_card_raw_action_primary) { + if (mContentView.getVisibility() == View.GONE) expandContentView(); + else collapseContentView(); + + } else if (v.getId() == R.id.view_card_raw_action_secondary) { + mContentView.setVisibility(View.GONE); + } + } + + private void collapseContentView() { + ValueAnimator valueHeightAnimator = ValueAnimator.ofInt(mContentViewHeight, 0); + valueHeightAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override public void onAnimationUpdate(ValueAnimator animation) { + ViewGroup.LayoutParams lp = mContentView.getLayoutParams(); + lp.height = (Integer) animation.getAnimatedValue(); + mContentView.setLayoutParams(lp); + } + }); + + valueHeightAnimator.start(); + valueHeightAnimator.addListener(new AnimatorListenerAdapter() { + @Override public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + mContentView.setVisibility(View.GONE); + } + }); + } + + private void expandContentView() { + mContentView.setVisibility(View.VISIBLE); + ValueAnimator valueHeightAnimator = ValueAnimator.ofInt(0, mContentViewHeight); + valueHeightAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + @Override public void onAnimationUpdate(ValueAnimator animation) { + ViewGroup.LayoutParams lp = mContentView.getLayoutParams(); + lp.height = (Integer) animation.getAnimatedValue(); + mContentView.setLayoutParams(lp); + } + }); + + valueHeightAnimator.start(); + } +} diff --git a/app/src/main/java/com/saulmm/material/activities/ColorActivity.java b/app/src/main/java/com/saulmm/material/activities/ColorActivity.java deleted file mode 100644 index f7a1ec4..0000000 --- a/app/src/main/java/com/saulmm/material/activities/ColorActivity.java +++ /dev/null @@ -1,162 +0,0 @@ -package com.saulmm.material.activities; - -import android.animation.Animator; -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.content.SharedPreferences; -import android.os.Bundle; -import android.util.TypedValue; -import android.view.View; -import android.widget.CheckBox; -import android.widget.CompoundButton; -import android.widget.Switch; - -import com.saulmm.material.R; -import com.saulmm.material.utils.GUIUtils; - -public class ColorActivity extends Activity { - - private SharedPreferences sharedpreferences; - private View revealView; - - @Override - protected void onCreate(final Bundle savedInstanceState) { - - super.onCreate(savedInstanceState); - - // Set the saved theme - sharedpreferences = getSharedPreferences("test", Context.MODE_PRIVATE); - setTheme(sharedpreferences.getInt("theme", R.style.AppTheme)); - - setContentView(R.layout.activity_color); - - // Views - Switch themeSwitch = (Switch) findViewById(R.id.theme_switch); - themeSwitch.setChecked(sharedpreferences.getBoolean(themeSwitch.getId()+"", false)); - themeSwitch.setOnCheckedChangeListener(checkedListener); - - CheckBox themeCheck = (CheckBox) findViewById(R.id.theme_check); - themeCheck.setChecked(sharedpreferences.getBoolean(themeCheck.getId()+"", false)); - themeCheck.setOnCheckedChangeListener(checkedListener); - - revealView = findViewById(R.id.reveal_view); - - // Show the unReveal effect - final int cx = sharedpreferences.getInt("x", 0); - final int cy = sharedpreferences.getInt("y", 0); - - startHideRevealEffect(cx, cy); - } - - private void startHideRevealEffect(final int cx, final int cy) { - - if (cx != 0 && cy != 0) { - // Show the unReveal effect when the view is attached to the window - revealView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { - @Override - public void onViewAttachedToWindow(View v) { - - // Get the accent color - TypedValue outValue = new TypedValue(); - getTheme().resolveAttribute(android.R.attr.colorPrimary, outValue, true); - revealView.setBackgroundColor(outValue.data); - - GUIUtils.hideRevealEffect(revealView, cx, cy, 1920); - } - - @Override - public void onViewDetachedFromWindow(View v) {} - }); - } - } - - - private void hideNavigationStatus() { - - View decorView = getWindow().getDecorView(); - - int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION; - decorView.setSystemUiVisibility(uiOptions); - } - - - Animator.AnimatorListener revealAnimationListener = new Animator.AnimatorListener() { - - @Override - public void onAnimationStart(Animator animation) {} - - @Override - public void onAnimationEnd(Animator animation) { - - Intent i = new Intent(ColorActivity.this, ColorActivity.class); - i.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); - startActivity(i); - overridePendingTransition(0, 0); - finish(); - } - - @Override - public void onAnimationCancel(Animator animation) {} - - @Override - public void onAnimationRepeat(Animator animation) {} - }; - - - public void view(View view) { - - int selectedTheme = 0; - int primaryColor = 0; - - switch (view.getId()) { - case R.id.circle1: - selectedTheme = R.style.theme1; - primaryColor = getResources().getColor(R.color.color_set_1_primary); - break; - - case R.id.circle2: - selectedTheme = R.style.theme2; - primaryColor = getResources().getColor(R.color.color_set_2_primary); - break; - - case R.id.circle3: - selectedTheme = R.style.theme3; - primaryColor = getResources().getColor(R.color.color_set_3_primary); - break; - - case R.id.circle4: - selectedTheme = R.style.theme4; - primaryColor = getResources().getColor(R.color.color_set_4_primary); - break; - } - - int [] location = new int[2]; - revealView.setBackgroundColor(primaryColor); - view.getLocationOnScreen(location); - - int cx = (location[0] + (view.getWidth() / 2)); - int cy = location[1] + (GUIUtils.getStatusBarHeight(this) / 2); - - SharedPreferences.Editor ed = sharedpreferences.edit(); - ed.putInt("x", cx); - ed.putInt("y", cy); - ed.putInt("theme", selectedTheme); - ed.apply(); - - hideNavigationStatus(); - GUIUtils.showRevealEffect(revealView, cx, cy, revealAnimationListener); - } - - - CompoundButton.OnCheckedChangeListener checkedListener = new CompoundButton.OnCheckedChangeListener() { - - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - SharedPreferences.Editor ed = sharedpreferences.edit(); - ed.putInt("theme", (isChecked) ? R.style.Base_Theme_AppCompat : R.style.Base_Theme_AppCompat_Light); - ed.putBoolean(buttonView.getId()+"", isChecked); - ed.apply(); - } - }; -} diff --git a/app/src/main/java/com/saulmm/material/activities/DialerSampleActivity.java b/app/src/main/java/com/saulmm/material/activities/DialerSampleActivity.java deleted file mode 100644 index 527a101..0000000 --- a/app/src/main/java/com/saulmm/material/activities/DialerSampleActivity.java +++ /dev/null @@ -1,47 +0,0 @@ - - -package com.saulmm.material.activities; - -import android.graphics.Point; -import android.os.Bundle; -import android.support.v4.view.ViewPager; -import android.support.v7.app.ActionBarActivity; -import android.support.v7.widget.Toolbar; -import android.view.Display; -import android.view.View; -import android.view.animation.Animation; -import android.view.animation.AnimationUtils; -import android.widget.ArrayAdapter; -import android.widget.FrameLayout; -import android.widget.GridView; -import android.widget.ImageButton; - -import com.saulmm.material.R; -import com.saulmm.material.utils.GUIUtils; -import com.saulmm.material.views.adapters.SamplePagerAdapter; -import com.saulmm.material.views.widgets.SlidingTabLayout; - -public class DialerSampleActivity extends ActionBarActivity { - - private int screenWidth; - private ImageButton fabButton; - private FrameLayout dialerKeysContainer; - private float absolutefabPosition; - - @Override - protected void onCreate(Bundle savedInstanceState) { - - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_dialer); - - configureToolbar(); - } - - private void configureToolbar() { - - Toolbar mainToolbar = (Toolbar) findViewById(R.id.activity_dialer_toolbar); - mainToolbar.setTitleTextColor(getResources().getColor(R.color.theme_dialer_accent)); - setSupportActionBar(mainToolbar); - getSupportActionBar().setTitle("Dialer"); - } -} diff --git a/app/src/main/java/com/saulmm/material/fragments/SamplePageFragment.java b/app/src/main/java/com/saulmm/material/activities/ElevationFragment.java similarity index 50% rename from app/src/main/java/com/saulmm/material/fragments/SamplePageFragment.java rename to app/src/main/java/com/saulmm/material/activities/ElevationFragment.java index 5bc38e2..5e97e93 100644 --- a/app/src/main/java/com/saulmm/material/fragments/SamplePageFragment.java +++ b/app/src/main/java/com/saulmm/material/activities/ElevationFragment.java @@ -1,22 +1,22 @@ -package com.saulmm.material.fragments; +package com.saulmm.material.activities; -import android.app.Fragment; import android.os.Bundle; import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; - import com.saulmm.material.R; -public class SamplePageFragment extends Fragment { - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { +public class ElevationFragment extends Fragment { - View rootView = inflater.inflate(R.layout.fragment_dialer_sample_page, container); + @Nullable @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_elevation, container, false); return rootView; } + + } diff --git a/app/src/main/java/com/saulmm/material/activities/ElevationSampleActivity.java b/app/src/main/java/com/saulmm/material/activities/ElevationSampleActivity.java deleted file mode 100644 index a7ea4db..0000000 --- a/app/src/main/java/com/saulmm/material/activities/ElevationSampleActivity.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.saulmm.material.activities; - -import android.app.Activity; -import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; - -import com.saulmm.material.R; - -public class ElevationSampleActivity extends Activity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_elevation_sample); - } -} diff --git a/app/src/main/java/com/saulmm/material/activities/MainActivity.java b/app/src/main/java/com/saulmm/material/activities/MainActivity.java new file mode 100644 index 0000000..efdb8f7 --- /dev/null +++ b/app/src/main/java/com/saulmm/material/activities/MainActivity.java @@ -0,0 +1,81 @@ +package com.saulmm.material.activities; + +import android.content.Intent; +import android.os.Bundle; +import android.support.design.widget.NavigationView; +import android.support.v4.app.Fragment; +import android.support.v4.widget.DrawerLayout; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.Gravity; +import android.view.MenuItem; +import android.view.View; +import com.saulmm.material.R; +import com.saulmm.material.fragments.HomeFragment; + +public class MainActivity extends AppCompatActivity implements + NavigationView.OnNavigationItemSelectedListener { + + private DrawerLayout mDrawerLayout; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + initUI(); + initFragment(new HomeFragment()); + } + + private void initUI() { + setContentView(R.layout.activity_main); + mDrawerLayout = (DrawerLayout) findViewById(R.id.activity_main_drawerlayout); + + NavigationView mNavigationView = (NavigationView) + findViewById(R.id.activity_main_navigationview); + + Toolbar toolbar = (Toolbar) findViewById(R.id.activity_main_toolbar); + toolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + mDrawerLayout.openDrawer(Gravity.LEFT); + } + }); + + mNavigationView.setNavigationItemSelectedListener(this); + } + + private void initFragment(Fragment fragment) { + getSupportFragmentManager().beginTransaction() + .replace(R.id.activity_main_container_framelayout, fragment) + .commit(); + } + + @Override + public boolean onNavigationItemSelected(MenuItem menuItem) { + Fragment nextFragment = null; + + switch (menuItem.getItemId()) { + case R.id.drawer_transitions: + startActivity(new Intent(MainActivity.this, TransitionFirstActivity.class)); + break; + + case R.id.nav_elevation_sample: + nextFragment = new ElevationFragment(); + break; + + case R.id.nav_circular_sample: + startActivity(new Intent(MainActivity.this, RevealFirstActivity.class)); + break; + + case R.id.drawer_cards: + startActivity(new Intent(MainActivity.this, CardsActivity.class)); + break; + } + + if (nextFragment != null) + initFragment(nextFragment); + + menuItem.setChecked(true); + mDrawerLayout.closeDrawers(); + return true; + } +} diff --git a/app/src/main/java/com/saulmm/material/activities/RevealFirstActivity.java b/app/src/main/java/com/saulmm/material/activities/RevealFirstActivity.java new file mode 100644 index 0000000..882d87c --- /dev/null +++ b/app/src/main/java/com/saulmm/material/activities/RevealFirstActivity.java @@ -0,0 +1,76 @@ +package com.saulmm.material.activities; + +import android.animation.Animator; +import android.app.Activity; +import android.content.Intent; +import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.View; +import com.saulmm.material.R; +import com.saulmm.material.utils.AnimatorAdapter; + +@SuppressWarnings("FieldCanBeLocal") +public class RevealFirstActivity extends AppCompatActivity { + public final static float SCALE_FACTOR = 20f; + public final static int ANIMATION_DURATION = 300; + + public final static int SECOND_ACTIVITY_REQUEST = 1; + public final static int SECOND_ACTIVITY_END = 1; + private boolean mReturning; + + private FloatingActionButton mFab; + private Toolbar mToolbar; + + @Override + protected void onCreate(final Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_reveal_first); + + mFab = (FloatingActionButton) findViewById(R.id.activity_reveal_fab); + mToolbar = (Toolbar) findViewById(R.id.activity_reveal_toolbar); + mToolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + onBackPressed(); + } + }); + } + + public void onFabCLick(View view) { + mReturning = false; + + mFab.animate() + .scaleXBy(SCALE_FACTOR) + .scaleYBy(SCALE_FACTOR) + .setListener(fabAnimAdapter) + .setDuration(ANIMATION_DURATION) + .start(); + } + + AnimatorAdapter fabAnimAdapter = new AnimatorAdapter() { + @Override public void onAnimationEnd(Animator animation) { + super.onAnimationEnd(animation); + + if (!mReturning) { + Intent secondActivityIntent = new Intent(RevealFirstActivity.this, RevealSecondActivity.class); + secondActivityIntent .addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION); + startActivityForResult(secondActivityIntent, SECOND_ACTIVITY_REQUEST); + } + } + }; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == SECOND_ACTIVITY_REQUEST && resultCode == SECOND_ACTIVITY_END) { + mReturning = true; + + mFab.animate() + .scaleXBy(SCALE_FACTOR).scaleYBy(SCALE_FACTOR) + .scaleX(1f).scaleY(1f) + .setDuration(ANIMATION_DURATION) + .start(); + } + } +} diff --git a/app/src/main/java/com/saulmm/material/activities/RevealSecondActivity.java b/app/src/main/java/com/saulmm/material/activities/RevealSecondActivity.java new file mode 100644 index 0000000..4d38a46 --- /dev/null +++ b/app/src/main/java/com/saulmm/material/activities/RevealSecondActivity.java @@ -0,0 +1,71 @@ +package com.saulmm.material.activities; + +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.view.View; +import android.view.animation.Animation; +import android.view.animation.AnimationSet; +import android.view.animation.AnimationUtils; +import android.widget.TextView; +import com.saulmm.material.R; + +public class RevealSecondActivity extends AppCompatActivity { + + private static final int FADE_DURATION_MILLIS = 800; + private static final int FADE_START_OFFSET = 300; + private TextView mHelpText; + private Toolbar mToolbar; + private View mContainer; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_reveal_second); + + mContainer = findViewById(R.id.activity_color2_container); + mToolbar = (Toolbar) findViewById(R.id.activity_reveal_toolbar); + mToolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + onBackPressed(); + } + }); + + mHelpText = (TextView) findViewById(R.id.activity_reveal_help_textview); + mHelpText.setVisibility(View.VISIBLE); + + Animation translateToolbarAnimation = AnimationUtils.loadAnimation(this, R.anim.translate_up_on); + mToolbar.setAnimation(translateToolbarAnimation); + + Animation fadeIn = AnimationUtils.loadAnimation(this, R.anim.abc_fade_in); + fadeIn.setStartOffset(FADE_START_OFFSET); + fadeIn.setDuration(FADE_DURATION_MILLIS); + mHelpText.setAnimation(fadeIn); + + AnimationSet animationSet = new AnimationSet(true); + animationSet.addAnimation(translateToolbarAnimation); + animationSet.addAnimation(fadeIn); + animationSet.start(); + } + + @Override + public void onBackPressed() { + Animation fadeOut = AnimationUtils.loadAnimation(this, R.anim.abc_fade_out); + fadeOut.setFillAfter(true); + mContainer.startAnimation(fadeOut); + + fadeOut.setAnimationListener(new Animation.AnimationListener() { + @Override public void onAnimationStart(Animation animation) {} + @Override public void onAnimationRepeat(Animation animation) {} + @Override public void onAnimationEnd(Animation animation) { + setResult(RevealFirstActivity.SECOND_ACTIVITY_END); + populateOnBackPressed(); + } + }); + } + + public void populateOnBackPressed() { + finish(); + overridePendingTransition(0, 0); + } +} diff --git a/app/src/main/java/com/saulmm/material/activities/SlidingActivity.java b/app/src/main/java/com/saulmm/material/activities/SlidingActivity.java deleted file mode 100644 index 98f92c5..0000000 --- a/app/src/main/java/com/saulmm/material/activities/SlidingActivity.java +++ /dev/null @@ -1,114 +0,0 @@ -/* -* Copyright 2013 The Android Open Source Project -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -package com.saulmm.material.activities; - -import android.app.FragmentTransaction; -import android.content.res.Configuration; -import android.os.Bundle; -import android.support.v4.widget.DrawerLayout; -import android.support.v7.app.ActionBarActivity; -import android.support.v7.app.ActionBarDrawerToggle; -import android.support.v7.widget.Toolbar; -import android.view.Gravity; -import android.view.MenuItem; -import android.view.View; - -import com.saulmm.material.R; -import com.saulmm.material.fragments.SlidingTabFragment; - -public class SlidingActivity extends ActionBarActivity { - - private DrawerLayout mDrawerLayout; - private ActionBarDrawerToggle mDrawerToggle; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_sliding); - - if (savedInstanceState == null) { - FragmentTransaction transaction = getFragmentManager().beginTransaction(); - SlidingTabFragment fragment = new SlidingTabFragment(); - transaction.replace(R.id.sample_content_fragment, fragment); - transaction.commit(); - } - - configureToolbar(); - configureDrawer(); - } - - private void configureToolbar() { - Toolbar mainToolbar = (Toolbar) findViewById(R.id.activity_transition_header); - setSupportActionBar(mainToolbar); - getSupportActionBar().setTitle("Sliding"); - - mainToolbar.setNavigationOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - - if (mDrawerLayout.isDrawerOpen(Gravity.START)) { - mDrawerLayout.closeDrawer(Gravity.START); - - } else { - mDrawerLayout.openDrawer(Gravity.START); - } - } - }); - } - - private void configureDrawer() { - // Configure drawer - mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); - - mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, - R.string.drawer_open, - R.string.drawer_closed) { - - public void onDrawerClosed(View view) { - supportInvalidateOptionsMenu(); - } - - public void onDrawerOpened(View drawerView) { - supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() - } - }; - - mDrawerLayout.setDrawerListener(mDrawerToggle); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - - if (mDrawerToggle.onOptionsItemSelected(item)) { - return true; - } - - return super.onOptionsItemSelected(item); - } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - mDrawerToggle.syncState(); - } - - @Override - public void onConfigurationChanged(Configuration newConfig) { - super.onConfigurationChanged(newConfig); - mDrawerToggle.onConfigurationChanged(newConfig); - } -} diff --git a/app/src/main/java/com/saulmm/material/activities/TransitionFirstActivity.java b/app/src/main/java/com/saulmm/material/activities/TransitionFirstActivity.java index 23e359b..fb11c7d 100644 --- a/app/src/main/java/com/saulmm/material/activities/TransitionFirstActivity.java +++ b/app/src/main/java/com/saulmm/material/activities/TransitionFirstActivity.java @@ -1,45 +1,96 @@ package com.saulmm.material.activities; -import android.app.Activity; import android.app.ActivityOptions; import android.content.Intent; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.transition.Explode; +import android.transition.Fade; import android.transition.Slide; +import android.transition.Transition; import android.util.Pair; import android.view.Gravity; import android.view.View; - +import android.widget.AdapterView; +import android.widget.Spinner; import com.saulmm.material.R; -public class TransitionFirstActivity extends Activity { +public class TransitionFirstActivity extends AppCompatActivity + implements AdapterView.OnItemSelectedListener { + public static final String EXTRA_TRANSITION = "selected_transition"; + public static final String TRANS_SLIDE = "slide"; + public static final String TRANS_FADE = "fade"; + public static final String TRANS_EXPLODE= "explode"; private View mFabButton; - private View mHeader; + private View mToolbar; + + public final static int [] EXCLUDED_VIEWS = new int[] { + android.R.id.navigationBarBackground, + android.R.id.statusBarBackground, + }; + private String mSelectedTransition = TRANS_SLIDE; @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); setContentView(R.layout.activity_transition_first); - mFabButton = findViewById(R.id.fab_button); - mHeader = findViewById(R.id.activity_transition_header); + mFabButton = findViewById(R.id.example_transition_fab); + mToolbar = findViewById(R.id.example_transition_header); - Slide slideExitTransition = new Slide(Gravity.BOTTOM); - slideExitTransition.excludeTarget(android.R.id.navigationBarBackground, true); - slideExitTransition.excludeTarget(android.R.id.statusBarBackground, true); - slideExitTransition.excludeTarget(R.id.activity_transition_header, true); - getWindow().setExitTransition(slideExitTransition); - } + ((Toolbar) mToolbar).setNavigationOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + onBackPressed(); + } + }); - public void onFabPressed(View view) { + Spinner mTransitionSpinner = (Spinner) findViewById(R.id.example_transition_spinner); + mTransitionSpinner.setOnItemSelectedListener(this); + } + @SuppressWarnings("unchecked") + public void onFabCLick(View view) { Intent i = new Intent (TransitionFirstActivity.this, TransitionSecondActivity.class); ActivityOptions transitionActivityOptions = ActivityOptions.makeSceneTransitionAnimation( - TransitionFirstActivity.this,Pair.create(mFabButton, "fab"), Pair.create(mHeader, "holder1")); + TransitionFirstActivity.this, Pair.create(mFabButton, "fab"), + Pair.create(mToolbar, "holder1")); + + i.putExtra(EXTRA_TRANSITION, mSelectedTransition); startActivity(i, transitionActivityOptions.toBundle()); } + + @Override @SuppressWarnings("ConstantConditions") + public void onItemSelected(AdapterView parent, View view, int position, long id) { + Transition exitTransition = null; + + switch (position) { + case 0: + exitTransition = new Slide(Gravity.BOTTOM); + mSelectedTransition = TRANS_SLIDE; + break; + case 1: + exitTransition = new Fade(); + mSelectedTransition = TRANS_FADE; + break; + case 2: + exitTransition = new Explode(); + mSelectedTransition = TRANS_EXPLODE; + break; + } + for (int excludeViewId : EXCLUDED_VIEWS) + exitTransition.excludeTarget(excludeViewId, true); + + getWindow().setExitTransition(exitTransition); + } + + + @Override + public void onNothingSelected(AdapterView parent) { + // Unused + } } diff --git a/app/src/main/java/com/saulmm/material/activities/TransitionSecondActivity.java b/app/src/main/java/com/saulmm/material/activities/TransitionSecondActivity.java index 376c26c..cf2bf73 100644 --- a/app/src/main/java/com/saulmm/material/activities/TransitionSecondActivity.java +++ b/app/src/main/java/com/saulmm/material/activities/TransitionSecondActivity.java @@ -1,75 +1,55 @@ package com.saulmm.material.activities; -import android.animation.Animator; -import android.app.Activity; import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.transition.Explode; +import android.transition.Fade; import android.transition.Slide; import android.transition.Transition; import android.view.Gravity; import android.view.View; -import android.view.ViewPropertyAnimator; -import android.widget.LinearLayout; - import com.saulmm.material.R; -import com.saulmm.material.utils.AnimatorAdapter; -import com.saulmm.material.utils.TransitionAdapter; - -public class TransitionSecondActivity extends Activity { - private static final int SCALE_DELAY = 30; - private LinearLayout rowContainer; +public class TransitionSecondActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); setContentView(R.layout.activity_transition_second); - rowContainer = (LinearLayout) findViewById(R.id.row_container2); - - Slide slideExitTransition = new Slide(Gravity.BOTTOM); - slideExitTransition.excludeTarget(android.R.id.navigationBarBackground, true); - slideExitTransition.excludeTarget(android.R.id.statusBarBackground, true); - - - getWindow().getEnterTransition().addListener(new TransitionAdapter() { - - @Override - public void onTransitionEnd(Transition transition) { - - super.onTransitionEnd(transition); - - getWindow().getEnterTransition().removeListener(this); - - for (int i = 0; i < rowContainer.getChildCount(); i++) { - - View rowView = rowContainer.getChildAt(i); - rowView.animate().setStartDelay(i * SCALE_DELAY) - .scaleX(1).scaleY(1); - } + Toolbar toolbar = (Toolbar) findViewById(R.id.example_transition_header); + toolbar.setNavigationOnClickListener(new View.OnClickListener() { + @Override public void onClick(View v) { + onBackPressed(); } }); + + initEnterTransition(); } - @Override - public void onBackPressed() { + private void initEnterTransition() { + String selectedTransition = getIntent().getExtras().getString( + TransitionFirstActivity.EXTRA_TRANSITION, + TransitionFirstActivity.TRANS_SLIDE); + + Transition enterTransition = null; - for (int i = 0; i < rowContainer.getChildCount(); i++) { + if (selectedTransition.equals(TransitionFirstActivity.TRANS_SLIDE)) + enterTransition = new Slide(Gravity.BOTTOM); - View rowView = rowContainer.getChildAt(i); + else if (selectedTransition.equals(TransitionFirstActivity.TRANS_FADE)) + enterTransition = new Fade(); - ViewPropertyAnimator propertyAnimator = rowView.animate() - .setStartDelay(i * SCALE_DELAY) - .scaleX(0).scaleY(0) - .setListener(new AnimatorAdapter() { + else if (selectedTransition.equals(TransitionFirstActivity.TRANS_EXPLODE)) + enterTransition = new Explode(); - @Override - public void onAnimationEnd(Animator animation) { + enterTransition.excludeTarget(android.R.id.navigationBarBackground, true); + enterTransition.excludeTarget(android.R.id.statusBarBackground, true); + getWindow().setEnterTransition(enterTransition); + } - super.onAnimationEnd(animation); - finishAfterTransition(); - } - }); - } + public void onFabCLick(View view) { + onBackPressed(); } } diff --git a/app/src/main/java/com/saulmm/material/fragments/HomeFragment.java b/app/src/main/java/com/saulmm/material/fragments/HomeFragment.java new file mode 100644 index 0000000..77b143b --- /dev/null +++ b/app/src/main/java/com/saulmm/material/fragments/HomeFragment.java @@ -0,0 +1,19 @@ +package com.saulmm.material.fragments; + +import android.os.Bundle; +import android.support.annotation.Nullable; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import com.saulmm.material.R; + +public class HomeFragment extends Fragment { + + @Nullable @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + + View rootView = inflater.inflate(R.layout.fragment_home, container, false); + return rootView; + } +} diff --git a/app/src/main/java/com/saulmm/material/fragments/SlidingTabFragment.java b/app/src/main/java/com/saulmm/material/fragments/SlidingTabFragment.java deleted file mode 100644 index b50dd02..0000000 --- a/app/src/main/java/com/saulmm/material/fragments/SlidingTabFragment.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.saulmm.material.fragments; - - -import android.app.Fragment; -import android.os.Bundle; -import android.support.v4.view.ViewPager; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.saulmm.material.R; -import com.saulmm.material.views.adapters.SamplePagerAdapter; -import com.saulmm.material.views.widgets.SlidingTabLayout; - - -public class SlidingTabFragment extends Fragment { - - static final String LOG_TAG = "SlidingTabsBasicFragment"; - - @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - - return inflater.inflate(R.layout.fragment_dialer_sliding, container, false); - } - - @Override - public void onViewCreated(View view, Bundle savedInstanceState) { - - ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewpager); - mViewPager.setAdapter(new SamplePagerAdapter(getActivity())); - - SlidingTabLayout mSlidingTabLayout = (SlidingTabLayout) view.findViewById(R.id.sliding_tabs); - mSlidingTabLayout.setViewPager(mViewPager); - } -} diff --git a/app/src/main/java/com/saulmm/material/utils/Utils.java b/app/src/main/java/com/saulmm/material/utils/Utils.java new file mode 100644 index 0000000..7aa3ce1 --- /dev/null +++ b/app/src/main/java/com/saulmm/material/utils/Utils.java @@ -0,0 +1,17 @@ +package com.saulmm.material.utils; + +import java.util.ArrayList; +import java.util.List; + +public class Utils { + + public static List createFakeData (int size) { + + ArrayList fakeDataList = new ArrayList<>(size); + + for (int i = 0; i < size; i++) + fakeDataList.add(String.format("Fake element #%d", i)); + + return fakeDataList; + } +} diff --git a/app/src/main/java/com/saulmm/material/views/adapters/SamplePagerAdapter.java b/app/src/main/java/com/saulmm/material/views/adapters/SamplePagerAdapter.java deleted file mode 100644 index e46a832..0000000 --- a/app/src/main/java/com/saulmm/material/views/adapters/SamplePagerAdapter.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.saulmm.material.views.adapters; - -import android.content.Context; -import android.support.v4.view.PagerAdapter; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import com.saulmm.material.R; - -@SuppressWarnings("FieldCanBeLocal") -public class SamplePagerAdapter extends PagerAdapter { - - private final String [] TITLES = {"SPEED DIAL", "RECENTS", "CONTACTS"}; - private final int FRAGMENT_COUNT = 3; - private Context context; - - public SamplePagerAdapter(Context context) { - this.context = context; - } - - @Override - public int getCount() { - return FRAGMENT_COUNT; - } - - @Override - public boolean isViewFromObject(View view, Object o) { - return o == view; - } - - - @Override - public CharSequence getPageTitle(int position) { - return TITLES[position]; - } - - @Override - public Object instantiateItem(ViewGroup container, int position) { - - View view = LayoutInflater.from(context).inflate( - R.layout.fragment_dialer_sample_page, - container, false); - - container.addView(view); - return view; - } - - @Override - public void destroyItem(ViewGroup container, int position, Object object) { - container.removeView((View) object); - } -} \ No newline at end of file diff --git a/app/src/main/java/com/saulmm/material/views/widgets/SlidingTabLayout.java b/app/src/main/java/com/saulmm/material/views/widgets/SlidingTabLayout.java deleted file mode 100644 index dbf48ad..0000000 --- a/app/src/main/java/com/saulmm/material/views/widgets/SlidingTabLayout.java +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.saulmm.material.views.widgets; - -import android.content.Context; -import android.graphics.Typeface; -import android.os.Build; -import android.support.v4.view.PagerAdapter; -import android.support.v4.view.ViewPager; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.widget.HorizontalScrollView; -import android.widget.TextView; - -import com.saulmm.material.R; - -import java.util.ArrayList; - -/** - * To be used with ViewPager to provide a tab indicator component which give constant feedback as to - * the user's scroll progress. - *

- * To use the component, simply add it to your view hierarchy. Then in your - * {@link android.app.Activity} or {@link android.support.v4.app.Fragment} call - * {@link #setViewPager(android.support.v4.view.ViewPager)} providing it the ViewPager this layout is being used for. - *

- * The colors can be customized in two ways. The first and simplest is to provide an array of colors - * via {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)}. The - * alternative is via the {@link SlidingTabLayout.TabColorizer} interface which provides you complete control over - * which color is used for any individual position. - *

- * The views used as tabs can be customized by calling {@link #setCustomTabView(int, int)}, - * providing the layout ID of your custom layout. - */ -public class SlidingTabLayout extends HorizontalScrollView { - - /** - * Allows complete control over the colors drawn in the tab layout. Set with - * {@link #setCustomTabColorizer(SlidingTabLayout.TabColorizer)}. - */ - public interface TabColorizer { - - /** - * @return return the color of the indicator used when {@code position} is selected. - */ - int getIndicatorColor(int position); - - /** - * @return return the color of the divider drawn to the right of {@code position}. - */ - int getDividerColor(int position); - - } - - private static final int TITLE_OFFSET_DIPS = 24; - private static final int TAB_VIEW_PADDING_DIPS = 16; - private static final int TAB_VIEW_TEXT_SIZE_SP = 14; - - private int mTitleOffset; - - private int mTabViewLayoutId; - private int mTabViewTextViewId; - - private ViewPager mViewPager; - private ViewPager.OnPageChangeListener mViewPagerPageChangeListener; - - private ArrayList pagerListeners = new ArrayList(); - - private final SlidingTabStrip mTabStrip; - - public SlidingTabLayout(Context context) { - this(context, null); - } - - public SlidingTabLayout(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - public SlidingTabLayout(Context context, AttributeSet attrs, int defStyle) { - super(context, attrs, defStyle); - - // Disable the Scroll Bar - setHorizontalScrollBarEnabled(false); - // Make sure that the Tab Strips fills this View - setFillViewport(true); - - mTitleOffset = (int) (TITLE_OFFSET_DIPS * getResources().getDisplayMetrics().density); - - mTabStrip = new SlidingTabStrip(context); - addView(mTabStrip, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); - - pagerListeners.add(new InternalViewPagerListener()); - } - - public void addPagerListener (ViewPager.OnPageChangeListener listener) { - pagerListeners.add(listener); - } - - /** - * Set the custom {@link SlidingTabLayout.TabColorizer} to be used. - * - * If you only require simple custmisation then you can use - * {@link #setSelectedIndicatorColors(int...)} and {@link #setDividerColors(int...)} to achieve - * similar effects. - */ - public void setCustomTabColorizer(TabColorizer tabColorizer) { - mTabStrip.setCustomTabColorizer(tabColorizer); - } - - /** - * Sets the colors to be used for indicating the selected tab. These colors are treated as a - * circular array. Providing one color will mean that all tabs are indicated with the same color. - */ - public void setSelectedIndicatorColors(int... colors) { - mTabStrip.setSelectedIndicatorColors(colors); - } - - /** - * Sets the colors to be used for tab dividers. These colors are treated as a circular array. - * Providing one color will mean that all tabs are indicated with the same color. - */ - public void setDividerColors(int... colors) { - mTabStrip.setDividerColors(colors); - } - - /** - * Set the {@link android.support.v4.view.ViewPager.OnPageChangeListener}. When using {@link SlidingTabLayout} you are - * required to set any {@link android.support.v4.view.ViewPager.OnPageChangeListener} through this method. This is so - * that the layout can update it's scroll position correctly. - * - * @see android.support.v4.view.ViewPager#setOnPageChangeListener(android.support.v4.view.ViewPager.OnPageChangeListener) - */ - public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) { - mViewPagerPageChangeListener = listener; - } - - /** - * Set the custom layout to be inflated for the tab views. - * - * @param layoutResId Layout id to be inflated - * @param textViewId id of the {@link android.widget.TextView} in the inflated view - */ - public void setCustomTabView(int layoutResId, int textViewId) { - mTabViewLayoutId = layoutResId; - mTabViewTextViewId = textViewId; - } - - /** - * Sets the associated view pager. Note that the assumption here is that the pager content - * (number of tabs and tab titles) does not change after this call has been made. - */ - public void setViewPager(ViewPager viewPager) { - mTabStrip.removeAllViews(); - - mViewPager = viewPager; - if (viewPager != null) { - viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int i, float v, int i2) { - - for (ViewPager.OnPageChangeListener pagerListener : pagerListeners) { - pagerListener.onPageScrolled(i, v, i2); - } - } - - @Override - public void onPageSelected(int i) { - for (ViewPager.OnPageChangeListener pagerListener : pagerListeners) { - pagerListener.onPageSelected(i); - } - } - - @Override - public void onPageScrollStateChanged(int i) { - for (ViewPager.OnPageChangeListener pagerListener : pagerListeners) { - pagerListener.onPageScrollStateChanged(i); - } - } - }); - populateTabStrip(); - } - } - - /** - * Create a default view to be used for tabs. This is called if a custom tab view is not set via - * {@link #setCustomTabView(int, int)}. - */ - protected TextView createDefaultTabView(Context context) { - TextView textView = new TextView(context); - textView.setGravity(Gravity.CENTER); - textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP); - textView.setTypeface(Typeface.DEFAULT_BOLD); - textView.setTextAppearance(context, R.style.SlidingTextViewStyle); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - // If we're running on Honeycomb or newer, then we can use the Theme's - // selectableItemBackground to ensure that the View has a pressed state - TypedValue outValue = new TypedValue(); - getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, - outValue, true); - textView.setBackgroundResource(outValue.resourceId); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - // If we're running on ICS or newer, enable all-caps to match the Action Bar tab style - textView.setAllCaps(true); - } - - int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density); - textView.setPadding(padding, padding, padding, padding); - - return textView; - } - - private void populateTabStrip() { - final PagerAdapter adapter = mViewPager.getAdapter(); - final OnClickListener tabClickListener = new TabClickListener(); - - for (int i = 0; i < adapter.getCount(); i++) { - View tabView = null; - TextView tabTitleView = null; - - if (mTabViewLayoutId != 0) { - // If there is a custom tab view layout id set, try and inflate it - tabView = LayoutInflater.from(getContext()).inflate(mTabViewLayoutId, mTabStrip, - false); - tabTitleView = (TextView) tabView.findViewById(mTabViewTextViewId); - } - - if (tabView == null) { - tabView = createDefaultTabView(getContext()); - } - - if (tabTitleView == null && TextView.class.isInstance(tabView)) { - tabTitleView = (TextView) tabView; - } - - tabTitleView.setText(adapter.getPageTitle(i)); - tabView.setOnClickListener(tabClickListener); - - mTabStrip.addView(tabView); - } - } - - @Override - protected void onAttachedToWindow() { - super.onAttachedToWindow(); - - if (mViewPager != null) { - scrollToTab(mViewPager.getCurrentItem(), 0); - } - } - - private void scrollToTab(int tabIndex, int positionOffset) { - final int tabStripChildCount = mTabStrip.getChildCount(); - if (tabStripChildCount == 0 || tabIndex < 0 || tabIndex >= tabStripChildCount) { - return; - } - - View selectedChild = mTabStrip.getChildAt(tabIndex); - if (selectedChild != null) { - int targetScrollX = selectedChild.getLeft() + positionOffset; - - if (tabIndex > 0 || positionOffset > 0) { - // If we're not at the first child and are mid-scroll, make sure we obey the offset - targetScrollX -= mTitleOffset; - } - - scrollTo(targetScrollX, 0); - } - } - - private class InternalViewPagerListener implements ViewPager.OnPageChangeListener { - private int mScrollState; - - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - int tabStripChildCount = mTabStrip.getChildCount(); - if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) { - return; - } - - mTabStrip.onViewPagerPageChanged(position, positionOffset); - - View selectedTitle = mTabStrip.getChildAt(position); - int extraOffset = (selectedTitle != null) - ? (int) (positionOffset * selectedTitle.getWidth()) - : 0; - scrollToTab(position, extraOffset); - - if (mViewPagerPageChangeListener != null) { - mViewPagerPageChangeListener.onPageScrolled(position, positionOffset, - positionOffsetPixels); - } - } - - @Override - public void onPageScrollStateChanged(int state) { - mScrollState = state; - - if (mViewPagerPageChangeListener != null) { - mViewPagerPageChangeListener.onPageScrollStateChanged(state); - } - } - - @Override - public void onPageSelected(int position) { - if (mScrollState == ViewPager.SCROLL_STATE_IDLE) { - mTabStrip.onViewPagerPageChanged(position, 0f); - scrollToTab(position, 0); - } - - if (mViewPagerPageChangeListener != null) { - mViewPagerPageChangeListener.onPageSelected(position); - } - } - - } - - private class TabClickListener implements OnClickListener { - @Override - public void onClick(View v) { - for (int i = 0; i < mTabStrip.getChildCount(); i++) { - if (v == mTabStrip.getChildAt(i)) { - mViewPager.setCurrentItem(i); - return; - } - } - } - } - -} diff --git a/app/src/main/java/com/saulmm/material/views/widgets/SlidingTabStrip.java b/app/src/main/java/com/saulmm/material/views/widgets/SlidingTabStrip.java deleted file mode 100644 index 50084af..0000000 --- a/app/src/main/java/com/saulmm/material/views/widgets/SlidingTabStrip.java +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.saulmm.material.views.widgets; - -import android.R; -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.util.AttributeSet; -import android.util.TypedValue; -import android.view.View; -import android.widget.LinearLayout; - -class SlidingTabStrip extends LinearLayout { - - private static final int DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS = 2; - private static final byte DEFAULT_BOTTOM_BORDER_COLOR_ALPHA = 0x26; - private static final int SELECTED_INDICATOR_THICKNESS_DIPS = 3; - private static final int DEFAULT_SELECTED_INDICATOR_COLOR = 0xFF33B5E5; - - private static final int DEFAULT_DIVIDER_THICKNESS_DIPS = 1; - private static final byte DEFAULT_DIVIDER_COLOR_ALPHA = 0x20; - private static final float DEFAULT_DIVIDER_HEIGHT = 0.5f; - - private final int mBottomBorderThickness; - private final Paint mBottomBorderPaint; - - private final int mSelectedIndicatorThickness; - private final Paint mSelectedIndicatorPaint; - - private final int mDefaultBottomBorderColor; - - private final Paint mDividerPaint; - private final float mDividerHeight; - - private int mSelectedPosition; - private float mSelectionOffset; - - private SlidingTabLayout.TabColorizer mCustomTabColorizer; - private final SimpleTabColorizer mDefaultTabColorizer; - - SlidingTabStrip(Context context) { - this(context, null); - } - - SlidingTabStrip(Context context, AttributeSet attrs) { - super(context, attrs); - setWillNotDraw(false); - - final float density = getResources().getDisplayMetrics().density; - - TypedValue outValue = new TypedValue(); - context.getTheme().resolveAttribute(R.attr.colorForeground, outValue, true); - final int themeForegroundColor = outValue.data; - - TypedValue backgroundValue = new TypedValue(); - context.getTheme().resolveAttribute(R.attr.colorPrimary, outValue, true); - final int themeBackground = outValue.data; - - TypedValue accentValue = new TypedValue(); - context.getTheme().resolveAttribute(R.attr.colorAccent, outValue, true); - final int accentColor = outValue.data; - - mDefaultBottomBorderColor = setColorAlpha(themeForegroundColor, - DEFAULT_BOTTOM_BORDER_COLOR_ALPHA); - - mDefaultTabColorizer = new SimpleTabColorizer(); - mDefaultTabColorizer.setIndicatorColors(accentColor); - mDefaultTabColorizer.setDividerColors(setColorAlpha(themeForegroundColor, - DEFAULT_DIVIDER_COLOR_ALPHA)); - - mBottomBorderThickness = (int) (DEFAULT_BOTTOM_BORDER_THICKNESS_DIPS * density); - mBottomBorderPaint = new Paint(); - mBottomBorderPaint.setColor(mDefaultBottomBorderColor); - - mSelectedIndicatorThickness = (int) (SELECTED_INDICATOR_THICKNESS_DIPS * density); - mSelectedIndicatorPaint = new Paint(); - - mDividerHeight = DEFAULT_DIVIDER_HEIGHT; - mDividerPaint = new Paint(); - mDividerPaint.setStrokeWidth((int) (0)); - - setBackgroundColor(themeBackground); - } - - void setCustomTabColorizer(SlidingTabLayout.TabColorizer customTabColorizer) { - mCustomTabColorizer = customTabColorizer; - invalidate(); - } - - void setSelectedIndicatorColors(int... colors) { - // Make sure that the custom colorizer is removed - mCustomTabColorizer = null; - mDefaultTabColorizer.setIndicatorColors(colors); - invalidate(); - } - - void setDividerColors(int... colors) { - // Make sure that the custom colorizer is removed - mCustomTabColorizer = null; - mDefaultTabColorizer.setDividerColors(colors); - invalidate(); - } - - void onViewPagerPageChanged(int position, float positionOffset) { - mSelectedPosition = position; - mSelectionOffset = positionOffset; - invalidate(); - } - - @Override - protected void onDraw(Canvas canvas) { - final int height = getHeight(); - final int childCount = getChildCount(); - final int dividerHeightPx = (int) (Math.min(Math.max(0f, mDividerHeight), 1f) * height); - final SlidingTabLayout.TabColorizer tabColorizer = mCustomTabColorizer != null - ? mCustomTabColorizer - : mDefaultTabColorizer; - - // Thick colored underline below the current selection - if (childCount > 0) { - View selectedTitle = getChildAt(mSelectedPosition); - int left = selectedTitle.getLeft(); - int right = selectedTitle.getRight(); - int color = tabColorizer.getIndicatorColor(mSelectedPosition); - - if (mSelectionOffset > 0f && mSelectedPosition < (getChildCount() - 1)) { - int nextColor = tabColorizer.getIndicatorColor(mSelectedPosition + 1); - if (color != nextColor) { - color = blendColors(nextColor, color, mSelectionOffset); - } - - // Draw the selection partway between the tabs - View nextTitle = getChildAt(mSelectedPosition + 1); - left = (int) (mSelectionOffset * nextTitle.getLeft() + - (1.0f - mSelectionOffset) * left); - right = (int) (mSelectionOffset * nextTitle.getRight() + - (1.0f - mSelectionOffset) * right); - } - - mSelectedIndicatorPaint.setColor(color); - - canvas.drawRect(left, height - mSelectedIndicatorThickness, right, - height, mSelectedIndicatorPaint); - } - - // Thin underline along the entire bottom edge - canvas.drawRect(0, height - mBottomBorderThickness, getWidth(), height, mBottomBorderPaint); - - // Vertical separators between the titles - int separatorTop = (height - dividerHeightPx) / 2; - for (int i = 0; i < childCount - 1; i++) { - View child = getChildAt(i); - mDividerPaint.setColor(tabColorizer.getDividerColor(i)); - canvas.drawLine(child.getRight(), separatorTop, child.getRight(), - separatorTop + dividerHeightPx, mDividerPaint); - } - } - - /** - * Set the alpha value of the {@code color} to be the given {@code alpha} value. - */ - private static int setColorAlpha(int color, byte alpha) { - return Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color)); - } - - /** - * Blend {@code color1} and {@code color2} using the given ratio. - * - * @param ratio of which to blend. 1.0 will return {@code color1}, 0.5 will give an even blend, - * 0.0 will return {@code color2}. - */ - private static int blendColors(int color1, int color2, float ratio) { - final float inverseRation = 1f - ratio; - float r = (Color.red(color1) * ratio) + (Color.red(color2) * inverseRation); - float g = (Color.green(color1) * ratio) + (Color.green(color2) * inverseRation); - float b = (Color.blue(color1) * ratio) + (Color.blue(color2) * inverseRation); - return Color.rgb((int) r, (int) g, (int) b); - } - - private static class SimpleTabColorizer implements SlidingTabLayout.TabColorizer { - private int[] mIndicatorColors; - private int[] mDividerColors; - - @Override - public final int getIndicatorColor(int position) { - return mIndicatorColors[position % mIndicatorColors.length]; - } - - @Override - public final int getDividerColor(int position) { - return mDividerColors[position % mDividerColors.length]; - } - - void setIndicatorColors(int... colors) { - mIndicatorColors = colors; - } - - void setDividerColors(int... colors) { - mDividerColors = colors; - } - } -} \ No newline at end of file diff --git a/app/src/main/res/anim/translate_down_on.xml b/app/src/main/res/anim/translate_down_on.xml index b534991..318a791 100644 --- a/app/src/main/res/anim/translate_down_on.xml +++ b/app/src/main/res/anim/translate_down_on.xml @@ -1,17 +1,25 @@ + android:interpolator="@android:interpolator/linear_out_slow_in" + > - + + + diff --git a/app/src/main/res/anim/translate_up_on.xml b/app/src/main/res/anim/translate_up_on.xml new file mode 100644 index 0000000..d3d5c1b --- /dev/null +++ b/app/src/main/res/anim/translate_up_on.xml @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/app/src/main/res/drawable-hdpi/ic_action_menu.png b/app/src/main/res/drawable-hdpi/ic_action_menu.png new file mode 100755 index 0000000..b4f820a Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_action_menu.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_animations.png b/app/src/main/res/drawable-hdpi/ic_animations.png new file mode 100755 index 0000000..f87c806 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_animations.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_arrow_left.png b/app/src/main/res/drawable-hdpi/ic_arrow_left.png new file mode 100755 index 0000000..9c87bbc Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_arrow_left.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_circle.png b/app/src/main/res/drawable-hdpi/ic_circle.png new file mode 100755 index 0000000..6b19897 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_circle.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_dialer.png b/app/src/main/res/drawable-hdpi/ic_dialer.png new file mode 100755 index 0000000..f7a7b6d Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_dialer.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_elevation.png b/app/src/main/res/drawable-hdpi/ic_elevation.png new file mode 100755 index 0000000..3d08bbe Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_elevation.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_menu_github.png b/app/src/main/res/drawable-hdpi/ic_menu_github.png new file mode 100755 index 0000000..ce90500 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_menu_github.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_ripple.png b/app/src/main/res/drawable-hdpi/ic_ripple.png new file mode 100755 index 0000000..5ba3fc5 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_ripple.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_tab.png b/app/src/main/res/drawable-hdpi/ic_tab.png new file mode 100755 index 0000000..f03c89e Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_tab.png differ diff --git a/app/src/main/res/drawable-hdpi/ic_transitions.png b/app/src/main/res/drawable-hdpi/ic_transitions.png new file mode 100755 index 0000000..02bac00 Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_transitions.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_action_menu.png b/app/src/main/res/drawable-mdpi/ic_action_menu.png new file mode 100755 index 0000000..6dc0a69 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_action_menu.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_animations.png b/app/src/main/res/drawable-mdpi/ic_animations.png new file mode 100755 index 0000000..3bc7503 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_animations.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_arrow_left.png b/app/src/main/res/drawable-mdpi/ic_arrow_left.png new file mode 100755 index 0000000..1ccdb15 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_arrow_left.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_circle.png b/app/src/main/res/drawable-mdpi/ic_circle.png new file mode 100755 index 0000000..9dd5a54 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_circle.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_dialer.png b/app/src/main/res/drawable-mdpi/ic_dialer.png new file mode 100755 index 0000000..304c677 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_dialer.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_elevation.png b/app/src/main/res/drawable-mdpi/ic_elevation.png new file mode 100755 index 0000000..cd2ce3f Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_elevation.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_menu_github.png b/app/src/main/res/drawable-mdpi/ic_menu_github.png new file mode 100755 index 0000000..ca168c1 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_menu_github.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_ripple.png b/app/src/main/res/drawable-mdpi/ic_ripple.png new file mode 100755 index 0000000..e20bbef Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_ripple.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_tab.png b/app/src/main/res/drawable-mdpi/ic_tab.png new file mode 100755 index 0000000..9198f88 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_tab.png differ diff --git a/app/src/main/res/drawable-mdpi/ic_transitions.png b/app/src/main/res/drawable-mdpi/ic_transitions.png new file mode 100755 index 0000000..9a0fc74 Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_transitions.png differ diff --git a/app/src/main/res/drawable-nodpi/back.png b/app/src/main/res/drawable-nodpi/back.png new file mode 100644 index 0000000..07df6ce Binary files /dev/null and b/app/src/main/res/drawable-nodpi/back.png differ diff --git a/app/src/main/res/drawable-nodpi/desert.jpg b/app/src/main/res/drawable-nodpi/desert.jpg new file mode 100644 index 0000000..ae8b1df Binary files /dev/null and b/app/src/main/res/drawable-nodpi/desert.jpg differ diff --git a/app/src/main/res/drawable-nodpi/material_devices.png b/app/src/main/res/drawable-nodpi/material_devices.png new file mode 100644 index 0000000..da615f6 Binary files /dev/null and b/app/src/main/res/drawable-nodpi/material_devices.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_action_menu.png b/app/src/main/res/drawable-xhdpi/ic_action_menu.png new file mode 100755 index 0000000..ff98744 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_action_menu.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_animations.png b/app/src/main/res/drawable-xhdpi/ic_animations.png new file mode 100755 index 0000000..e1beb5a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_animations.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_arrow_left.png b/app/src/main/res/drawable-xhdpi/ic_arrow_left.png new file mode 100755 index 0000000..01d1efa Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_arrow_left.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_circle.png b/app/src/main/res/drawable-xhdpi/ic_circle.png new file mode 100755 index 0000000..31364ba Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_circle.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_dialer.png b/app/src/main/res/drawable-xhdpi/ic_dialer.png new file mode 100755 index 0000000..eba2ed5 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_dialer.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_elevation.png b/app/src/main/res/drawable-xhdpi/ic_elevation.png new file mode 100755 index 0000000..604a76a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_elevation.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_menu_github.png b/app/src/main/res/drawable-xhdpi/ic_menu_github.png new file mode 100755 index 0000000..4574c68 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_menu_github.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_ripple.png b/app/src/main/res/drawable-xhdpi/ic_ripple.png new file mode 100755 index 0000000..496641e Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_ripple.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_tab.png b/app/src/main/res/drawable-xhdpi/ic_tab.png new file mode 100755 index 0000000..2f493ab Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_tab.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_transitions.png b/app/src/main/res/drawable-xhdpi/ic_transitions.png new file mode 100755 index 0000000..c6170b4 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_transitions.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_action_menu.png b/app/src/main/res/drawable-xxhdpi/ic_action_menu.png new file mode 100755 index 0000000..92c49e5 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_action_menu.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_animations.png b/app/src/main/res/drawable-xxhdpi/ic_animations.png new file mode 100755 index 0000000..ef4210f Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_animations.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_arrow_left.png b/app/src/main/res/drawable-xxhdpi/ic_arrow_left.png new file mode 100755 index 0000000..f1f48ff Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_arrow_left.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_circle.png b/app/src/main/res/drawable-xxhdpi/ic_circle.png new file mode 100755 index 0000000..ba3e6fb Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_circle.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_dialer.png b/app/src/main/res/drawable-xxhdpi/ic_dialer.png new file mode 100755 index 0000000..904de83 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_dialer.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_elevation.png b/app/src/main/res/drawable-xxhdpi/ic_elevation.png new file mode 100755 index 0000000..5561162 Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_elevation.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_github.png b/app/src/main/res/drawable-xxhdpi/ic_menu_github.png new file mode 100755 index 0000000..05bccca Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_menu_github.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_ripple.png b/app/src/main/res/drawable-xxhdpi/ic_ripple.png new file mode 100755 index 0000000..b727a3a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_ripple.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_tab.png b/app/src/main/res/drawable-xxhdpi/ic_tab.png new file mode 100755 index 0000000..281156a Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_tab.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_transitions.png b/app/src/main/res/drawable-xxhdpi/ic_transitions.png new file mode 100755 index 0000000..e8b479b Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_transitions.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_action_menu.png b/app/src/main/res/drawable-xxxhdpi/ic_action_menu.png new file mode 100755 index 0000000..61b66e3 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_action_menu.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_animations.png b/app/src/main/res/drawable-xxxhdpi/ic_animations.png new file mode 100755 index 0000000..80185c8 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_animations.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_arrow_left.png b/app/src/main/res/drawable-xxxhdpi/ic_arrow_left.png new file mode 100755 index 0000000..4524896 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_arrow_left.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_circle.png b/app/src/main/res/drawable-xxxhdpi/ic_circle.png new file mode 100755 index 0000000..5000487 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_circle.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_elevation.png b/app/src/main/res/drawable-xxxhdpi/ic_elevation.png new file mode 100755 index 0000000..ff920c4 Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_elevation.png differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_transitions.png b/app/src/main/res/drawable-xxxhdpi/ic_transitions.png new file mode 100755 index 0000000..e3efb1a Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_transitions.png differ diff --git a/app/src/main/res/drawable/color1.xml b/app/src/main/res/drawable/color1.xml deleted file mode 100644 index b336be9..0000000 --- a/app/src/main/res/drawable/color1.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/color2.xml b/app/src/main/res/drawable/color2.xml deleted file mode 100644 index 12e117e..0000000 --- a/app/src/main/res/drawable/color2.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/color3.xml b/app/src/main/res/drawable/color3.xml deleted file mode 100644 index c0cf05c..0000000 --- a/app/src/main/res/drawable/color3.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/color4.xml b/app/src/main/res/drawable/color4.xml deleted file mode 100644 index 445b2ca..0000000 --- a/app/src/main/res/drawable/color4.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/gradient.xml b/app/src/main/res/drawable/gradient.xml new file mode 100644 index 0000000..5344d67 --- /dev/null +++ b/app/src/main/res/drawable/gradient.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_adb_24dp.xml b/app/src/main/res/drawable/ic_adb_24dp.xml new file mode 100644 index 0000000..19174ec --- /dev/null +++ b/app/src/main/res/drawable/ic_adb_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_arrow_back_24dp.xml b/app/src/main/res/drawable/ic_arrow_back_24dp.xml new file mode 100644 index 0000000..beafea3 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_back_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_arrow_forward_24dp.xml b/app/src/main/res/drawable/ic_arrow_forward_24dp.xml new file mode 100644 index 0000000..cf9e208 --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_forward_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_cards_grey.xml b/app/src/main/res/drawable/ic_cards_grey.xml new file mode 100644 index 0000000..88aaab0 --- /dev/null +++ b/app/src/main/res/drawable/ic_cards_grey.xml @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_transitions_grey.xml b/app/src/main/res/drawable/ic_transitions_grey.xml new file mode 100644 index 0000000..09c7585 --- /dev/null +++ b/app/src/main/res/drawable/ic_transitions_grey.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ripple_dialer_call.xml b/app/src/main/res/drawable/ripple_dialer_call.xml deleted file mode 100644 index 87d6c96..0000000 --- a/app/src/main/res/drawable/ripple_dialer_call.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ripple_dialer_idle.xml b/app/src/main/res/drawable/ripple_dialer_idle.xml deleted file mode 100644 index ead7fa8..0000000 --- a/app/src/main/res/drawable/ripple_dialer_idle.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ripple_rect.xml b/app/src/main/res/drawable/ripple_rect.xml deleted file mode 100644 index 436956c..0000000 --- a/app/src/main/res/drawable/ripple_rect.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/ripple_round.xml b/app/src/main/res/drawable/ripple_round.xml deleted file mode 100644 index 2524a0b..0000000 --- a/app/src/main/res/drawable/ripple_round.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/translation_selector.xml b/app/src/main/res/drawable/translation_selector.xml deleted file mode 100644 index dc4a668..0000000 --- a/app/src/main/res/drawable/translation_selector.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_color.xml b/app/src/main/res/layout/activity_color.xml deleted file mode 100644 index 78816d1..0000000 --- a/app/src/main/res/layout/activity_color.xml +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/color.xml b/app/src/main/res/menu/color.xml index 3428565..2fd61f0 100644 --- a/app/src/main/res/menu/color.xml +++ b/app/src/main/res/menu/color.xml @@ -1,6 +1,6 @@

+ tools:context="com.saulmm.material.activities.RevealFirstActivity" > + tools:context="com.saulmm.material.activities.ElevationFragment"> + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml deleted file mode 100644 index 3a30fbe..0000000 --- a/app/src/main/res/values-v21/styles.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 409abcc..6fb8d8b 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,33 +1,14 @@ - - - #F48FB1 - #EC407A - #2A2A2A - #EEFF41 - #ff515252 - - - - #00C853 - #0277BD - #0288D1 - #FFF - - - #4fc3f7 - #009688 - - #42bd41 - #673AB7 - - #ffb74d - #E91E63 - - #ff8a65 - #d500f9 - - - + #FFFFFF + #dedede + #BDBDBD + #696969 + #212121 + + #FF5722 + #df4c1e + #E64A19 + #FF9800 + #d68001 \ No newline at end of file diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 47c6cba..56145b2 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -11,4 +11,29 @@ 4dp 240dp + + 4dp + 8dp + 12dp + 16dp + 24dp + 32dp + + + 16dp + 24dp + 32dp + 48dp + 55dp + 72dp + + + 2dp + 4dp + 8dp + 16dp + + + 56dp + 112dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d4bacff..fbd18fb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,12 +1,15 @@ - My Application + Material Examples Settings - MyActivity2 Example action + + Transitions example NavDrawerActivity ColorActivity + MyActivity2 + Coordinator example Open Close @@ -26,6 +29,31 @@ # + + Slide + Fade + Explode + + ElevationSampleActivity + Github + This project focuses on different concepts and examples to illustrate the \'visual language\' Material Design. + This is an independent activity of previous activity, if you hit the \'back\' button or the navigation arrow will return to the previous activity reversing the reveal animation + Pressing the \'fab\' it will begin to transition as background in the next activity + Reveal activity 1 + Reveal activity 2 + There are three types of predefined activity transitions, included in the Android Framework: Slide, Fade and Explode.\n + +\nThe Slide transition, accepts a Gravity in its construchor, which indicate from where they have to move (slide) the items containing the Activity.\n\n + +The Fade transition, changes the opacity of the elements of the layout, can be configured if the Fade will \'fade in\' or \'fade out\'.\n\n + +The Explode transition will translate out all elements mimicking an explosion. + This activity shows how to be aware of the events of transitions, animations and implement accordingly + Transition type + Activity transitions + Elevation example + Reveal sample + I\'m a thing. But, like most politicians, he promised more than he could deliver. You won\'t have time for sleeping, soldier, not with all the bed making you\'ll be doing. Then we\'ll go with that data file! Hey, you add a one and two zeros to that or we walk! You\'re going to do his laundry? I\'ve got to find a way to escape. diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ff6c9d2..06466eb 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,8 +1,57 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..1104d53 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,24 @@ + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle b/build.gradle index d3ff69d..5388476 100644 --- a/build.gradle +++ b/build.gradle @@ -1,14 +1,10 @@ -// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:1.1.0' - - // NOTE: Do not place your application dependencies here; they belong - // in the individual module build.gradle files + classpath 'com.android.tools.build:gradle:1.3.0' } }