blob: db9017c3a9494e79d5e85a6c09a93b8221fd039b [file] [log] [blame]
Romain Guy1a81aea2011-03-21 15:24:51 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.test.hwui;
18
19import android.animation.ObjectAnimator;
20import android.app.Activity;
21import android.content.Context;
22import android.graphics.Bitmap;
23import android.graphics.Canvas;
24import android.graphics.Paint;
25import android.os.Bundle;
26import android.view.Gravity;
27import android.view.View;
28import android.widget.FrameLayout;
29
30@SuppressWarnings({"UnusedDeclaration"})
31public class BitmapMutateActivity extends Activity {
32 private static final int PATTERN_SIZE = 400;
33
34 private ObjectAnimator mAnimator;
35
36 @Override
37 protected void onCreate(Bundle savedInstanceState) {
38 super.onCreate(savedInstanceState);
39 final BitmapsView view = new BitmapsView(this);
40 final FrameLayout layout = new FrameLayout(this);
41
42 layout.addView(view, new FrameLayout.LayoutParams(480, 800, Gravity.CENTER));
43
44 setContentView(layout);
45
46 mAnimator = ObjectAnimator.ofInt(view, "offset", 0, PATTERN_SIZE - 1);
47 mAnimator.setDuration(1500);
48 mAnimator.setRepeatCount(ObjectAnimator.INFINITE);
49 mAnimator.setRepeatMode(ObjectAnimator.REVERSE);
50 mAnimator.start();
51 }
52
53 @Override
54 protected void onDestroy() {
55 super.onDestroy();
56 mAnimator.cancel();
57 }
58
59 static class BitmapsView extends View {
60 private final Paint mBitmapPaint;
61 private final Bitmap mBitmap1;
62 private final int[] mPixels;
63
64 private int mOffset;
65 private int mSlice;
66 private static final int[] mShifts = new int[] { 16, 8, 0 };
67
68 BitmapsView(Context c) {
69 super(c);
70
71 mBitmap1 = Bitmap.createBitmap(PATTERN_SIZE, PATTERN_SIZE, Bitmap.Config.ARGB_8888);
72 mBitmapPaint = new Paint();
73
74 mPixels = new int[mBitmap1.getWidth() * mBitmap1.getHeight()];
75 mSlice = mBitmap1.getWidth() / 3;
76 }
77
78 public void setOffset(int offset) {
79 mOffset = offset;
80 invalidate();
81 }
82
83 @Override
84 protected void onDraw(Canvas canvas) {
85 super.onDraw(canvas);
86
87 int width = mBitmap1.getWidth();
88 int height = mBitmap1.getHeight();
89
90 canvas.translate((getWidth() - width) / 2, (getHeight() - height) / 2);
91
92 for (int x = 0; x < width; x++) {
93 int color = 0xff000000;
94 int i = x == 0 ? 0 : x - 1;
95 color |= (int) ((0xff * ((i + mOffset) % mSlice) / (float) mSlice)) <<
96 mShifts[i / mSlice];
97 for (int y = 0; y < height; y++) {
98 mPixels[y * width + x] = color;
99 }
100 }
101
102 mBitmap1.setPixels(mPixels, 0, width, 0, 0, width, height);
103 canvas.drawBitmap(mBitmap1, 0.0f, 0.0f, mBitmapPaint);
104 }
105 }
106}