1171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy/*
2171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy * Copyright (C) 2011 The Android Open Source Project
3171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy *
4171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy * you may not use this file except in compliance with the License.
6171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy * You may obtain a copy of the License at
7171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy *
8171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy *
10171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy * Unless required by applicable law or agreed to in writing, software
11171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy * See the License for the specific language governing permissions and
14171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy * limitations under the License.
15171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy */
16171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
17171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guypackage com.android.test.hwui;
18171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
19171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.animation.ObjectAnimator;
20171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.app.Activity;
21171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.content.Context;
22171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.content.res.Resources;
23171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.graphics.Paint;
24171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.graphics.PorterDuff;
25171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.graphics.PorterDuffColorFilter;
26171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.os.Bundle;
27171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.util.DisplayMetrics;
28171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.view.View;
29171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.view.ViewGroup;
30171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.widget.ArrayAdapter;
31171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.widget.ListView;
32171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guyimport android.widget.TextView;
33171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
34171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy@SuppressWarnings({"UnusedDeclaration"})
35171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guypublic class ViewLayersActivity extends Activity {
36171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy    @Override
37171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy    protected void onCreate(Bundle savedInstanceState) {
38171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        super.onCreate(savedInstanceState);
39171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
40171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        setContentView(R.layout.view_layers);
41171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
42171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        setupList(R.id.list1);
43171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        setupList(R.id.list2);
44171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        setupList(R.id.list3);
45171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
46171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        getWindow().getDecorView().postDelayed(new Runnable() {
47171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            @Override
48171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            public void run() {
49171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                final View leftList = findViewById(R.id.list1);
50171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                final View middleList = findViewById(R.id.list2);
51171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                final View rightList = findViewById(R.id.list3);
52171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
53171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                final ObjectAnimator moveRight = ObjectAnimator.ofFloat(leftList,
54171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                        "x", 0, rightList.getLeft());
55171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                moveRight.setDuration(1500);
56171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                moveRight.setRepeatCount(ObjectAnimator.INFINITE);
57171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                moveRight.setRepeatMode(ObjectAnimator.REVERSE);
58171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
59171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                final ObjectAnimator moveLeft = ObjectAnimator.ofFloat(rightList,
60171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                        "x", rightList.getLeft(), 0);
61171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                moveLeft.setDuration(1500);
62171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                moveLeft.setRepeatCount(ObjectAnimator.INFINITE);
63171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                moveLeft.setRepeatMode(ObjectAnimator.REVERSE);
64171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
65171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                final ObjectAnimator rotate = ObjectAnimator.ofFloat(middleList,
66171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                        "rotationY", 0, 360);
67171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                rotate.setDuration(3000);
68171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                rotate.setRepeatCount(ObjectAnimator.INFINITE);
69171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                rotate.setRepeatMode(ObjectAnimator.REVERSE);
70171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
71171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                Paint p = new Paint();
72171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                p.setColorFilter(new PorterDuffColorFilter(0xffff0000, PorterDuff.Mode.MULTIPLY));
73171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
74171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                Paint p2 = new Paint();
75171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                p2.setAlpha(127);
76171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
77171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                Paint p3 = new Paint();
78171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                p3.setColorFilter(new PorterDuffColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY));
79171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
80171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                leftList.setLayerType(View.LAYER_TYPE_SOFTWARE, p);
81171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                leftList.setAlpha(0.5f);
82171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                middleList.setLayerType(View.LAYER_TYPE_HARDWARE, p3);
83171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                middleList.setAlpha(0.5f);
842b7028eabac80cec170572bc0e945a1d4224e595Romain Guy                middleList.setVerticalFadingEdgeEnabled(true);
85171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                rightList.setLayerType(View.LAYER_TYPE_SOFTWARE, p2);
86171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
87171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                moveRight.start();
88171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                moveLeft.start();
89171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                rotate.start();
902b7028eabac80cec170572bc0e945a1d4224e595Romain Guy
912b7028eabac80cec170572bc0e945a1d4224e595Romain Guy                ((View) leftList.getParent()).setAlpha(0.5f);
92171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            }
93171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        }, 2000);
94171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy    }
95171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
96171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy    private void setupList(int listId) {
97171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        final ListView list = (ListView) findViewById(listId);
98171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        list.setAdapter(new SimpleListAdapter(this));
99171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy    }
100171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
101171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy    private static class SimpleListAdapter extends ArrayAdapter<String> {
102171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        public SimpleListAdapter(Context context) {
103171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            super(context, android.R.layout.simple_list_item_1, DATA_LIST);
104171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        }
105171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
106171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        @Override
107171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        public View getView(int position, View convertView, ViewGroup parent) {
108171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            TextView v = (TextView) super.getView(position, convertView, parent);
109171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            final Resources r = getContext().getResources();
110171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            final DisplayMetrics metrics = r.getDisplayMetrics();
111171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            v.setCompoundDrawablePadding((int) (6 * metrics.density + 0.5f));
112171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            v.setCompoundDrawablesWithIntrinsicBounds(r.getDrawable(R.drawable.icon),
113171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy                    null, null, null);
114171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            return v;
115171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy        }
116171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy    }
117171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy
118171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy    private static final String[] DATA_LIST = {
119171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
120171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
121171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
122171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
123171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
124171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil",
125171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "British Indian Ocean Territory", "British Virgin Islands", "Brunei", "Bulgaria",
126171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Burkina Faso", "Burundi", "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
127171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
128171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
129171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
130171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
131171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
132171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
133171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
134171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
135171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
136171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
137171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
138171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
139171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
140171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
141171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
142171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
143171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
144171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
145171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
146171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
147171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
148171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
149171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
150171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
151171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
152171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
153171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
154171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
155171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
156171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Ukraine", "United Arab Emirates", "United Kingdom",
157171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
158171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
159171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy            "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
160171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy    };
161171c592f0b7066acf279863c8a52ddabea49d3dbRomain Guy}
162