<?xml version="1.0" encoding="UTF-8"?>
<!--
 Copyright 2014 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.
-->



<sample>
    <name>ElevationBasic</name>
    <group>UI</group>
    <package>com.example.android.elevationbasic</package>



    <!-- change minSdk if needed-->
    <minSdk>21</minSdk>
    <compileSdkVersion>21</compileSdkVersion>


    <strings>
        <intro>
            <![CDATA[
            This sample demonstrates two alternative ways to move a view in the z-axis. The
            first view has a fixed elevation using XML and the second one is raised when the user
            taps on it, using setTranslationZ().
            ]]>
        </intro>
        <sample_action>Elevation Basic</sample_action>
    </strings>

    <template src="base"/>
    <template src="FragmentView"/>
    <common src="logger"/>
    <common src="activities"/>
    <metadata>
        <status>PUBLISHED</status>
        <categories>UI, Input</categories>
        <technologies>Android</technologies>
        <languages>Java</languages>
        <solutions>Mobile</solutions>
        <level>BEGINNER</level>
        <icon>screenshots/icon-web.png</icon>
        <screenshots>
            <img>screenshots/fixed.png</img>
            <img>screenshots/raised.png</img>
        </screenshots>
        <api_refs>
            <android>android.view.MotionEvent</android>
        </api_refs>
        <description>
<![CDATA[
This sample demonstrates ways to move a view in the z-axis using
`setTranslationZ()`. This method was introduced in API Level 21 ('Lollipop').
]]>
        </description>
        <intro>
<![CDATA[
This sample uses two shapes, a circle and a square, and it demonstrates two
alternative ways to move a view in the z-axis. The first shape, the circle,
has a fixed elevation, which is defined in XML. The second view, the square,
changes its elevation using [setTranslationZ()][1] when a user touches it:

    shape2.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            int action = motionEvent.getActionMasked();
            /* Raise view on ACTION_DOWN and lower it on ACTION_UP. */
            switch (action) {
                case MotionEvent.ACTION_DOWN:
                    Log.d(TAG, "ACTION_DOWN on view.");
                    view.setTranslationZ(120);
                    break;
                case MotionEvent.ACTION_UP:
                    Log.d(TAG, "ACTION_UP on view.");
                    view.setTranslationZ(0);
                    break;
                default:
                    return false;
            }
            return true;
        }
    });

The elevation reverts back once the touch is removed.

[1]: https://developer.android.com/training/material/shadows-clipping.html#Elevation
]]>
        </intro>
    </metadata>
</sample>
