18ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy/* 28ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * Copyright (C) 2010 The Android Open Source Project 38ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * 48ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 58ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * you may not use this file except in compliance with the License. 68ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * You may obtain a copy of the License at 78ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * 88ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 98ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * 108ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * Unless required by applicable law or agreed to in writing, software 118ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 128ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * See the License for the specific language governing permissions and 148ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * limitations under the License. 158ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy */ 168ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 178ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guypackage com.android.test.hwui; 188ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 198ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.app.Activity; 208ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.content.Context; 218ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.graphics.Canvas; 228ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.graphics.Region; 238ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.os.Bundle; 248ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.widget.FrameLayout; 258ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.widget.TextView; 268ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 278ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy@SuppressWarnings({"UnusedDeclaration"}) 288ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guypublic class ClipRegion2Activity extends Activity { 298ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy @Override 308ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy protected void onCreate(Bundle savedInstanceState) { 318ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy super.onCreate(savedInstanceState); 328ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 338ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy final RegionView group = new RegionView(this); 348ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 358ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy final TextView text = new TextView(this); 368ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy text.setText(buildText()); 378ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy group.addView(text); 388ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 398ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy setContentView(group); 408ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy } 418ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 428ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy private static CharSequence buildText() { 438ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy StringBuffer buffer = new StringBuffer(); 448ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy for (int i = 0; i < 10; i++) { 458ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy buffer.append(LOREM_IPSUM); 468ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy } 478ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy return buffer; 488ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy } 498ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 508ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy public static class RegionView extends FrameLayout { 51b7b93e00893f5c690a96bd3e0e10583bc5721f83Romain Guy private Region mRegion = new Region(); 528ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy private float mClipPosition = 0.0f; 538ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 548ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy public RegionView(Context c) { 558ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy super(c); 568ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy } 578ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 588ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy public float getClipPosition() { 598ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy return mClipPosition; 608ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy } 618ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 628ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy public void setClipPosition(float clipPosition) { 638ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy mClipPosition = clipPosition; 648ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy invalidate(); 658ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy } 668ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 678ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy @Override 688ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy protected void dispatchDraw(Canvas canvas) { 698ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 708ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy canvas.save(); 718ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 72b7b93e00893f5c690a96bd3e0e10583bc5721f83Romain Guy mRegion.set(0, 0, getWidth(), getHeight()); 738ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy mRegion.op(getWidth() / 4, getHeight() / 4, 3 * getWidth() / 4, 3 * getHeight() / 4, 748ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy Region.Op.DIFFERENCE); 758ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 768ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy canvas.clipRegion(mRegion); 778ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy super.dispatchDraw(canvas); 788ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 798ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy canvas.restore(); 808ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy } 818ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy } 828ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy 838ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy private static final String LOREM_IPSUM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sagittis molestie aliquam. Donec metus metus, laoreet nec sagittis vitae, ultricies sit amet eros. Suspendisse sed massa sit amet felis consectetur gravida. In vitae erat mi, in egestas nisl. Phasellus quis ipsum massa, at scelerisque arcu. Nam lectus est, pellentesque eget lacinia non, congue vitae augue. Aliquam erat volutpat. Pellentesque bibendum tincidunt viverra. Aliquam erat volutpat. Maecenas pretium vulputate placerat. Nulla varius elementum rutrum. Aenean mollis blandit imperdiet. Pellentesque interdum fringilla ligula."; 848ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy} 85