1849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy/* 2849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * Copyright (C) 2011 The Android Open Source Project 3849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * 4849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * you may not use this file except in compliance with the License. 6849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * You may obtain a copy of the License at 7849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * 8849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * 10849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * Unless required by applicable law or agreed to in writing, software 11849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * See the License for the specific language governing permissions and 14849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy * limitations under the License. 15849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy */ 16849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 17849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guypackage com.android.test.hwui; 18849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 19849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.app.Activity; 20849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.content.Context; 21849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.content.res.Resources; 222055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guyimport android.graphics.Canvas; 23849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.graphics.Paint; 242055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guyimport android.graphics.Path; 25849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.graphics.PorterDuff; 26849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.graphics.PorterDuffColorFilter; 27849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.os.Bundle; 282055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guyimport android.util.AttributeSet; 29849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.util.DisplayMetrics; 30849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.view.View; 31849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.view.ViewGroup; 32849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.widget.ArrayAdapter; 332055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guyimport android.widget.FrameLayout; 34849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.widget.ListView; 35849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guyimport android.widget.TextView; 36849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 37849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy@SuppressWarnings({"UnusedDeclaration"}) 38849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guypublic class ViewLayersActivity5 extends Activity { 39ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka private final Paint mPaint = new Paint(); 40ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka 41849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy @Override 42849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy protected void onCreate(Bundle savedInstanceState) { 43849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy super.onCreate(savedInstanceState); 442055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 452055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy init(); 462055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 47849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy setContentView(R.layout.view_layers_5); 482055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy setupList(R.id.list1); 492055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 502055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 512055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy public static class ClipFrameLayout extends FrameLayout { 522055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy private final Path mClipPath = new Path(); 532055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy private boolean mClipEnabled; 542055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 552055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy public ClipFrameLayout(Context context, AttributeSet attrs) { 562055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy super(context, attrs); 572055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 582055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 592055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy public ClipFrameLayout(Context context, AttributeSet attrs, int defStyle) { 602055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy super(context, attrs, defStyle); 612055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 622055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 632055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy public boolean isClipEnabled() { 642055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy return mClipEnabled; 652055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 66849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 672055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy public void setClipEnabled(boolean clipEnabled) { 682055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy mClipEnabled = clipEnabled; 692055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy invalidate(); 702055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 712055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 722055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy @Override 732055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy protected void dispatchDraw(Canvas canvas) { 742055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy if (mClipEnabled) { 752055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy mClipPath.reset(); 762055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy mClipPath.addCircle(getWidth() / 2.0f, getHeight() / 2.0f, 772055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy Math.min(getWidth(), getHeight()) / 3.0f, Path.Direction.CW); 782055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 792055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy canvas.clipPath(mClipPath); 802055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 812055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy super.dispatchDraw(canvas); 822055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 832055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 842055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 852055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy private void init() { 86ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka mPaint.setColorFilter(new PorterDuffColorFilter(0xff00ff00, PorterDuff.Mode.MULTIPLY)); 872055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 88ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka 892055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy public void enableClip(View v) { 902055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy ((ClipFrameLayout) findViewById(R.id.container)).setClipEnabled(true); 912055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy } 922055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy 932055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy public void disableClip(View v) { 942055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy ((ClipFrameLayout) findViewById(R.id.container)).setClipEnabled(false); 95849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy } 96849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 97ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka public void enableLayer(View v) { 982055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy findViewById(R.id.container).setLayerType(View.LAYER_TYPE_HARDWARE, mPaint); 99ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka } 100ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka 101ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka public void disableLayer(View v) { 1022055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy findViewById(R.id.container).setLayerType(View.LAYER_TYPE_NONE, null); 103849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy } 104849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 105ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka public void growLayer(View v) { 1062055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy findViewById(R.id.container).getLayoutParams().height = ViewGroup.LayoutParams.MATCH_PARENT; 1072055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy findViewById(R.id.container).requestLayout(); 108ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka } 109ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka 110ba64974141bb04d35759c7a8f1741d23c172f9a5Michael Jurka public void shrinkLayer(View v) { 1112055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy findViewById(R.id.container).getLayoutParams().height = 300; 1122055abaa0a590c35e27e1ae2e7d7cfccdfb98b59Romain Guy findViewById(R.id.container).requestLayout(); 113849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy } 114849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 115849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy private void setupList(int listId) { 116849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy final ListView list = (ListView) findViewById(listId); 117849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy list.setAdapter(new SimpleListAdapter(this)); 118849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy } 119849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 120849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy private static class SimpleListAdapter extends ArrayAdapter<String> { 121849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy public SimpleListAdapter(Context context) { 122849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy super(context, android.R.layout.simple_list_item_1, DATA_LIST); 123849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy } 124849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 125849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy @Override 126849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy public View getView(int position, View convertView, ViewGroup parent) { 127849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy TextView v = (TextView) super.getView(position, convertView, parent); 128849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy final Resources r = getContext().getResources(); 129849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy final DisplayMetrics metrics = r.getDisplayMetrics(); 130849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy v.setCompoundDrawablePadding((int) (6 * metrics.density + 0.5f)); 131849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy v.setCompoundDrawablesWithIntrinsicBounds(r.getDrawable(R.drawable.icon), 132849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy null, null, null); 133849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy return v; 134849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy } 135849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy } 136849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy 137849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy private static final String[] DATA_LIST = { 138849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra", 139849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina", 140849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", 141849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium", 142849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia", 143849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", 144849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "British Indian Ocean Territory", "British Virgin Islands", "Brunei", "Bulgaria", 145849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Burkina Faso", "Burundi", "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde", 146849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Cayman Islands", "Central African Republic", "Chad", "Chile", "China", 147849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo", 148849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic", 149849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic", 150849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea", 151849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland", 152849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia", 153849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar", 154849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau", 155849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary", 156849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica", 157849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos", 158849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", 159849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands", 160849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova", 161849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia", 162849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand", 163849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas", 164849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru", 165849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar", 166849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena", 167849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon", 168849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal", 169849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands", 170849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea", 171849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden", 172849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas", 173849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey", 174849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda", 175849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Ukraine", "United Arab Emirates", "United Kingdom", 176849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan", 177849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara", 178849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy "Yemen", "Yugoslavia", "Zambia", "Zimbabwe" 179849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy }; 180849d0a37cf2ca6c6a6c2d4d4456495e32e363120Romain Guy} 181