1 package mhr.appandroid.views;
3 import java.util.Arrays;
5 import mhr.appandroid.R;
6 import android.content.Context;
7 import android.graphics.Bitmap;
8 import android.graphics.BitmapFactory;
9 import android.graphics.Canvas;
10 import android.graphics.Paint;
11 import android.graphics.Path;
12 import android.graphics.Paint.Style;
13 import android.graphics.Path.Direction;
14 import android.graphics.RectF;
15 import android.graphics.drawable.ShapeDrawable;
16 import android.graphics.drawable.shapes.PathShape;
17 import android.graphics.Rect;
18 import android.util.AttributeSet;
19 import android.view.MotionEvent;
20 import android.view.View;
66 setLayerType(View.LAYER_TYPE_SOFTWARE, null);
67 cPressed = BitmapFactory.decodeResource(getResources(),
R.drawable.scrubber_control_pressed_bw);
68 cNormal = BitmapFactory.decodeResource(getResources(),
R.drawable.scrubber_control_normal_bw);
94 super(context, attrs);
98 public CropPicker(Context context, AttributeSet attrs,
int defStyle) {
99 super(context, attrs, defStyle);
141 return new RectF(
crop);
156 public void onMeasure(
int widthMeasureSpec,
int heightMeasureSpec) {
157 super.onMeasure(widthMeasureSpec, heightMeasureSpec);
163 super.onSizeChanged(w, h, oldw, oldh);
165 maxRect =
new RectF(0, 0, w, h);
166 crop =
new RectF(w / 4, h / 4, 3 * w / 4, 3 * h / 4);
168 curs =
new Rect[] {
new Rect(),
new Rect(),
new Rect(),
new Rect() };
175 canvas.drawColor(0x00000000);
177 Path pth =
new Path();
178 pth.addRect(0, 0,
maxRect.right,
crop.top, Direction.CW);
179 pth.addRect(0,
crop.top,
crop.left,
crop.bottom, Direction.CW);
182 ShapeDrawable sdr =
new ShapeDrawable(
new PathShape(pth,
maxRect.width(),
maxRect.height()));
183 Paint paint = sdr.getPaint();
184 paint.setStyle(Style.FILL);
185 paint.setColor(0xAA000000);
189 canvas.drawLines(
new float[] {
196 for (Rect r :
curs) {
198 canvas.drawBitmap(
cPressed, null, r, null);
200 canvas.drawBitmap(
cNormal, null, r, null);
210 switch (ev.getAction()) {
211 case MotionEvent.ACTION_DOWN:
212 for (
int i = 0; i <
curs.length; i++) {
213 if (
curs[i].contains((
int)x, (
int)y)) {
227 case MotionEvent.ACTION_MOVE:
268 case MotionEvent.ACTION_UP: