- FrameLayout (赤でマーク)
- ソース ImageView(黒)
- OnTouchListener(オレンジ)を持つオブジェクト(imageview)
OnTouchListenerを持つオブジェクトを介して、イメージビュー(ソースイメージビュー)で塗りつぶされたビットマップの一部を表示したい。
だからそれは問題ではありません、私はこのようにやっています:
Bitmap bt = Bitmap.createBitmap(sourceBitmap,event.getX(),event.getY(),250,250);
ここで:
- SourceBitmap - ソース ImageView に追加されるイメージです
- event.getX() / event.getY()は、ビットマップの一部を描画し始める 座標です
- 250、250 - 部分ビットマップ(部分)のサイズ。
結果は次のとおりです。
そのため、オブジェクトが(タッチリスナーを使用して)境界線に移動すると、問題が発生します(オレンジ色のオブジェクトで、Object.width()/2 を使用して境界線から出る可能性があります) 。
したがって、この場合:
どうすればこの結果を達成できますか:
部分の結果は次のようになります:
- ビットマップの一部
- 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;
}
}
助言がありますか?ありがとう!