0

Drawable がソースとして設定され、scaleType が centerCrop である ImageView があります。この ImageView を Fragment の背景として使用しています。その角の 1 つを透明に設定したいと思います。コーナーピクセルを透明に設定する方法を見つけました(https://stackoverflow.com/questions/15228013/skewed-corner-of-imageview-drawable/)が、問題は、DrawableがImageViewによってスケーリングされるため、ソース Drawable のピクセルの透明度を変更するだけでは、うまくいきません。画面サイズによっては、カットオフ領域がまったく表示されないか、大きすぎます。

ImageView に表示されている実際のピクセルを取得する方法はありますか、またはスケーリングの結果として生じるビットマップを自分で計算する必要がありますか?

4

1 に答える 1

0

これらのルーチンを使用して、画面座標をビットマップ座標に変換できるはずです。

 /**
     * Convert points from screen coordinates to point on image
     * @param point screen point
     * @param view ImageView
     * @return a Point on the image that corresponds to that which was touched
     */
    private Point convertPointForView(Point point, ImageView view) {
        Point outPoint = new Point();
        Matrix inverse = new Matrix();
        view.getImageMatrix().invert(inverse);
        float[] convertPoint = new float[] {point.x, point.y};
        inverse.mapPoints(convertPoint);
        outPoint.x = (int)convertPoint[0];
        outPoint.y = (int)convertPoint[1];
        return outPoint;
    }

    /**
     * Convert a rect from screen coordinates to a rect on the image
     * @param rect
     * @param view
     * @return    a rect on the image that corresponds to what is actually shown
     */
    private Rect convertRectForView(Rect rect, ImageView view) {
        Rect outRect = new Rect();
        Matrix inverse = new Matrix();
        view.getImageMatrix().invert(inverse);
        float[] convertPoints = new float[] {rect.left, rect.top, rect.right, rect.bottom}  ;
        inverse.mapPoints(convertPoints);
        outRect = new Rect((int)convertPoints[0], (int)convertPoints[1], (int)convertPoints[2], (int)convertPoints[3]);
        return outRect;
    }
于 2013-06-14T04:11:02.593 に答える