【发布时间】:2016-03-07 06:02:36
【问题描述】:
- FrameLayout(用红色标记)
- 源 ImageView(黑色)
- Object(imageview) 和 OnTouchListener(橙色)
通过带有 OnTouchListener 的 Object,我想显示在 imageview(source imageview)上填充的位图的一部分。
所以这不是问题,我是这样做的:Bitmap bt = Bitmap.createBitmap(sourceBitmap,event.getX(),event.getY(),250,250);
在哪里:
- SourceBitmap - 是添加到源 ImageView 的图像
- event.getX() / event.getY() 是一个坐标,我开始绘制位图的一部分
- 250,250 - 部分位图(部分)的大小。
结果是:
所以问题出现了,当我的对象(带有触摸监听器)进入边界时(我已经为 orange 对象提供了这种可能性,以 out 离开边界对象宽度()/ 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;
}
}
有什么建议吗?谢谢!
【问题讨论】:
-
对于您的
"How to Draw Portion of Bitmap via Canvas DrawBitmap"问题请参阅:Canvas#drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)- """绘制指定位图,自动缩放/平移以填充目标矩形。如果源矩形不为空,则指定 要绘制的位图子集。""" -
@pskink 我试过了,但没有走运。不明白为什么。
-
@pskink 这正是我需要的stackoverflow.com/questions/31405082/…。我用 DrawBitmap 尝试了不同的变体,但不明白为什么,得到不好的结果
-
那么你尝试了什么?你的代码是什么?
-
@pskink 好的,我现在添加我的代码 sn-ps(但需要一点时间,因为需要重新翻译成 java :))。
标签: android canvas bitmap border drawbitmap