gpt4 book ai didi

android - 如何通过Canvas DrawBitmap绘制位图的一部分

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:08:05 25 4
gpt4 key购买 nike

我有一个
source condition :

  1. FrameLayout(标红)
  2. 源ImageView(黑色)
  3. 带有 OnTouchListener(橙色)的对象( ImageView )

通过带有 OnTouchListener 的 Object,我想显示一部分位图,这些位图填充在 imageview(source imageview)上。

所以这不是问题,我这样做:
位图 bt = Bitmap.createBitmap(sourceBitmap,event.getX(),event.getY(),250,250);

哪里:

  1. SourceBitmap - 是添加到源 ImageView 的图像
  2. event.getX()/event.getY() 是一个坐标,我开始绘制位图的一部分
  3. 250,250 - 它是部分位图(part)的大小。

结果是:

result of first case

所以问题发生了,当我的对象(带有触摸监听器)去边界时(我已经为orange对象创造了这种可能性,去边界Object.width()/2).

所以在这种情况下:
case #2
我怎样才能达到这个结果:
excepted result of case #2
部分结果将是:

  1. 部分位图
  2. 第二部分是框架布局背景的颜色。

我目前尝试的是:

public boolean onTouch(View view, MotionEvent event) {

switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:

//i want to draw bigger portion then corrds
int CurrentX = (int)view.getX() - (view.getWidth());
int CurrentY = (int)view.getY() - (view.getHeight());

//case,when object is going out of border
if(CurrentX <= 0)
{
Paint paint = new Paint();
paint.setStyle( Style.FILL );
paint.setColor( Color.RED );

mBitmap = Bitmap.CreateBitmap(sourceBitmap,(int)view.getX() + Math.abs(CurrentX),(int)view.getY(),250,250);
Canvas canvas = new Canvas(mBitmap);
canvas.drawBitmap(mBitmap,new Rect((int)view.getX()+Math.abs(CurrentX), (int)view.getY(),250-Math.abs(CurrentX),250),new RectF(Math.abs(CurrentX), 0, 250,250),paint);
}
break;
}

return true;
}
}

有什么建议吗?谢谢!

最佳答案

我自己解决!
复杂,但结果非常好。
我们开始:
所以对于我的案例(当带有 OnTouchListener 的对象可以在 X 轴和 Y 轴上超出边界时),我制定了后置条件(某种规定).


条件

宽度 = imageView 的宽度,我想在其中显示结果。
Height = imageView 的高度,我想在其中显示结果;

左侧

  1. X_Coord <0 && Y_Coord - Height/2 < 0 && Y_Coord> <Bitmap.Height
    这是我们的热门区域
  2. X_Coord <0 && Y_Coord - Height/2> 0 && Y_Coord> <Bitmap.Height
    这是我们的中间区域
  3. X_Coord <0 && Y_Coord - Height/2> 0 && Y_Coord> > Bitmap.Height
    这是我们的底部区域

右侧

  1. X_Coord> Bitmap.Height && Y_Coord - Height/2> 0 && Y_Coord <Bitmap.Height
    这是我们的中间区域
  2. X_Coord> Bitmap.Height && Y_Coord - Height/2 < 0 && Y_Coord <Bitmap.Height
    这是我们的热门区域
  3. X_Coord> Bitmap.Height && Y_Coord - Height/2> 0 && Y_Coord> Bitmap.Height
    这是我们的底部区域

标准(中间区域,不向左或向右)

  1. X_Coord - Width/2> 0 && X_Coord <Bitmap.Width> && Y_Coord - Height/2 < 0 && Y_Coord <Bitmap.Height
    这是我们的热门区域
  2. X_Coord - Width/2> 0 && X_Coord <Bitmap.Width> && Y_Coord - Height/2> 0 && Y_Coord> Bitmap.Height
    这是我们的底部区域
  3. X_Coord - Width/2> 0 && X_Coord <Bitmap.Width> && Y_Coord - Height/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's 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's all!
}

//do the same for other condition....etc
break;
}



return true;
}

尽情享受吧!

关于android - 如何通过Canvas DrawBitmap绘制位图的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34052186/

25 4 0
文章推荐: java-cassnadra object Frozen annotation for address map>>>,
文章推荐: java - 类型参数 G 隐藏了类型 G
文章推荐: java - 使用 Spring REST Docs 记录分层 JSON 负载
文章推荐: java - 如何在 Java 中将 List 转换为 List