12

私は持っています
ソースの状態

  1. FrameLayout (赤でマーク)
  2. ソース ImageView(黒)
  3. OnTouchListener(オレンジ)を持つオブジェクト(imageview)

OnTouchListenerを持つオブジェクトを介して、イメージビュー(ソースイメージビュー)で塗りつぶされたビットマップの一部を表示したい。

だからそれは問題ではありません、私はこのようにやっています:
Bitmap bt = Bitmap.createBitmap(sourceBitmap,event.getX(),event.getY(),250,250);

ここで:

  1. SourceBitmap - ソース ImageView に追加されるイメージです
  2. event.getX() / event.getY()は、ビットマップの一部を描画し始める 座標です
  3. 250250 - 部分ビットマップ(部分)のサイズ。

結果は次のとおりです。

最初のケースの結果

そのため、オブジェクトが(タッチリスナーを使用して)境界線に移動すると、問題が発生します(オレンジ色のオブジェクトで、Object.width()/2 を使用して境界線から出る可能性があります)

したがって、この場合: どうすればこの結果を達成できますか: 部分の結果は次のようになります:
ケース#2

ケース#2の例外結果

  1. ビットマップの一部
  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;
}
}

助言がありますか?ありがとう!

4

2 に答える 2