如何在Android中将宽度适合于横向方向(使用TouchImageView)中的屏幕

时间:2013-01-02 06:39:49

标签: android android-imageview multi-touch screen-orientation rotational-matrices

我正在使用来自GitHub的MikeOrtiz TouchImageView。这是链接TouchImageView

  • 我试图仅在横向方向上将宽度设置为屏幕 这是一张图片来展示我想要做的事情。

  • 我想要这个

Landscape width fit to screen

  • 而不是我现在在风景中得到的 landscape width not fit to screes

这是一些代码。

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    viewWidth = MeasureSpec.getSize(widthMeasureSpec);
    viewHeight = MeasureSpec.getSize(heightMeasureSpec);

    //
    // Rescales image on rotation
    //
    if (oldMeasuredHeight == viewWidth && oldMeasuredHeight == viewHeight
            || viewWidth == 0 || viewHeight == 0)
        return;
    oldMeasuredHeight = viewHeight;
    oldMeasuredWidth = viewWidth;

    if (saveScale == 1) {
        // Fit to screen.
        float scale;

        Drawable drawable = getDrawable();
        if (drawable == null || drawable.getIntrinsicWidth() == 0
                || drawable.getIntrinsicHeight() == 0)
            return;
        int bmWidth = drawable.getIntrinsicWidth();
        int bmHeight = drawable.getIntrinsicHeight();

        Log.d("bmSize", "bmWidth: " + bmWidth + " bmHeight : " + bmHeight);

        float scaleX = (float) viewWidth / (float) bmWidth;
        float scaleY = (float) viewHeight / (float) bmHeight;
        scale = Math.min(scaleX, scaleY);
        matrix.setScale(scale , scale );

        // Center the image
        float redundantYSpace = (float) viewHeight
                - (scale * (float) bmHeight);
        float redundantXSpace = (float) viewWidth
                - (scale * (float) bmWidth);
        redundantYSpace /= (float) 2;
        redundantXSpace /= (float) 2;

        matrix.postTranslate(redundantXSpace, redundantYSpace);

        origWidth = viewWidth - 2 * redundantXSpace;
        origHeight = viewHeight - 2 * redundantYSpace;
        setImageMatrix(matrix);
    }
    fixTrans();
}

谢谢

1 个答案:

答案 0 :(得分:0)

您已在res layout-land中创建一个文件夹,然后在其中创建一个具有相同名称的xml文件,并在landsacpe模式下根据需要设置UI,它非常适合您

如果您将home.xml放在layout-port文件夹中,当您的设备处于纵向时,它将使用以下文件:layout-port / home.xml。

如果您将home.xml放在layout-land文件夹中,当您的设备处于横向时,它将使用以下文件:layout-land / home.xml。

对于纵向和横向等不同方向模式的含义...我们使用两个home.xml文件;一个在layout-port中,另一个在layout-land中。另一方面,如果要为两者使用相同的布局文件,只需将home.xml放在布局文件夹中,然后将其从layout-land和layout-port中删除即可。

refer this link