Ответ 1
Решено !
Это был сложный, но результат довольно хороший.
Здесь мы go:
Итак, для моего case (когда объект с OnTouchListener может выйти из границы Оси X и Y), я создал Условия сообщения (некоторые правила).
Условия
Ширина= ширина изображения, где я хочу показать результат.
Высота= Высота изображения, где я хочу показать результат;
LeftSide
- X_Coord < 0 && & Y_Coord - Высота /2 < 0 && Y_Coord < Bitmap.Height
Это наша Верхняя область. - X_Coord < 0 && & Y_Coord - Высота /2 > 0 && & Y_Coord < Bitmap.Height
Это наша Средняя область. - X_Coord < 0 && & Y_Coord - Высота /2 > 0 && & Y_Coord > Bitmap.Height
Это наша Нижняя область.
RightSide
- X_Coord > Bitmap.Height && & & Y_Coord - Высота /2 > 0 && & Y_Coord < Bitmap.Height
Это наша Средняя область. - X_Coord > Bitmap.Height && & & Y_Coord - Высота /2 < 0 && Y_Coord < Bitmap.Height
Это наша верхняя область. - X_Coord > Bitmap.Height && & & Y_Coord - Высота /2 > 0 && & Y_Coord > Bitmap.Height
Это наша Нижняя область.
Стандарт (область Ближнего, которые не идут влево или вправо)
- X_Coord - Ширина /2 > 0 && & & X_Coord < Bitmap.Width && & Y_Coord - Высота /2 < 0 && Y_Coord < Bitmap.Height
Это наша верхняя область. - X_Coord - Ширина /2 > 0 && & & X_Coord < Bitmap.Width && & Y_Coord - Высота /2 > 0 && & Y_Coord > Bitmap.Height
Это наша Нижняя область. - X_Coord - Ширина /2 > 0 && & & X_Coord < Bitmap.Width && & Y_Coord - Высота /2 > 0 && & Y_Coord < Bitmap.Height
Это наша Средняя область.
Итак, используя это " Условия", я рисую часть растрового изображения в моем случае MotionEvent.ACTION_MOVE
.
Рассмотрим пример:
public boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
int Width = ResultImgView.getWidth();
int Height = ResultImgView.getHeight();
//paint for our Red background
Paint paint = new Paint();
paint.setStyle( Style.FILL );
paint.setColor( Color.RED );
Bitmap mBitmap = null;
Canvas canvas = null;
//Our Condition
if(view.getX() - Width / 2 >= SourceBitmap.getWidth()
&& view.getY() - Height / 2 > 0 && view.getY() + Height / 2 < SourceBitmap.getHeight())
{
//Nice,we entered here. Seems that we're now located at RightSide at Middle position
//So let draw part of bitmap.
//our margin for X coords
int Difference = (int)((view.getX() - Width / 2 ) - SourceBitmap.getWidth();
//dont forget to put margin
//BTW we're now took portion of bitmap
mBitmap = Bitmap.createBitmap(SourceBitmap, ((int)view.getX() - Width / 2) - Difference, (int)view.getY() - Height / 2, Width,Height);
canvas = new Canvas(mBitmap);
//draw rect
canvas.drawRect(0,0,mBitmap.getWidth(),mBitmap.getHeight(),paint);
//draw portion of bitmap
canvas.drawBitmap(mBitmap,new Rect(Difference, 0,mBitmap.getWidth(),mBitmap.getHeight()),new Rect(0,0,mBitmap.getWidth() - Difference,mBitmap.getHeight()),null);
//and that all!
}
//do the same for other condition....etc
break;
}
return true;
}
Наслаждайтесь!
PS Извините за мой eng:).