Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将相对线旋转180度?_Java_Android_Android Relativelayout - Fatal编程技术网

Java 如何将相对线旋转180度?

Java 如何将相对线旋转180度?,java,android,android-relativelayout,Java,Android,Android Relativelayout,我正在尝试制作一个应用程序,它是为两个人设计的,两个人都能看到一半,所以我需要垂直翻转一半。我使用的是一个LinearLayout,里面有两个RelativeLayouts,其中有layout\u weight=“1” 问题是,我不知道怎么做这个翻转。显然,android:rotate仅在版本11+(3.0+)中可用,但我希望它至少支持2.2 在阅读了其他相关的问题之后,我尝试了各种各样的方法,但似乎都不管用。我试图扩展RelativeLayout并重写onDraw函数,但它似乎没有任何作用。这

我正在尝试制作一个应用程序,它是为两个人设计的,两个人都能看到一半,所以我需要垂直翻转一半。我使用的是一个
LinearLayout
,里面有两个
RelativeLayout
s,其中有
layout\u weight=“1”

问题是,我不知道怎么做这个翻转。显然,
android:rotate
仅在版本11+(3.0+)中可用,但我希望它至少支持2.2

在阅读了其他相关的问题之后,我尝试了各种各样的方法,但似乎都不管用。我试图扩展RelativeLayout并重写
onDraw
函数,但它似乎没有任何作用。这是我的密码:

public class FlippedRelativeLayout extends RelativeLayout
{
    public FlippedRelativeLayout(Context context)
    {
        super(context);
    }

    public FlippedRelativeLayout(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    public FlippedRelativeLayout(Context context, AttributeSet attrs,
            int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    protected void onDraw(Canvas canvas)
    {
        canvas.save();
        canvas.rotate(180);
        super.onDraw(canvas);
        canvas.restore();
    }
}

我很高兴能得到任何帮助,谢谢

非常有趣的问题

您可以尝试创建两个部分透明的
活动
-s,显示它们自己的同一布局xml副本,然后根据轮到谁移动,切换活动的“z顺序”

Activity
A将是“您自己的”活动,它的上半部分透明,下半部分为
RelativeLayout
。它也会有一个正常的屏幕方向,比如:
setRequestedOrientation(ActivityInfo.screen\u orientation\u crative)

活动
B将是“你的对手活动”。它还有一个透明的上半部和一个与底部相同的
RelativeLayout
。但是,它会有一个反转的屏幕方向,比如:
setRequestedOrientation(ActivityInfo.screen\u orientation\u REVERSE\u cartive)
。这意味着
活动
B的透明部分将与
活动
A的
相对部分重叠,而
活动
A的透明部分将与
活动
B的
相对部分重叠

你也可以输入相应的或其他合适的值,这样你就不会在“再次启动”时创建你的
活动的新实例,即将“make-a-move-ticket”传递给对手

不幸的是,(Android 2.3.something)和您明确地请求API级别8

这种方法的巧妙之处在于,由于一次只能有一个活动具有焦点(因此,接受输入),因此您将自动获得一个状态机用于用户输入:在您移动之前,对手将无法与他/她的棋盘交互,反之亦然

希望这至少能给你一些想法

干杯

试试这个:

public class MyRelativeLayout extends RelativeLayout {    
    public MyRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyRelativeLayout(Context context) {
        super(context);
        init();
    }

    private void init() {
        setStaticTransformationsEnabled(true);
    }

    @Override
    protected boolean getChildStaticTransformation(View child, Transformation t) {
        t.setTransformationType(Transformation.TYPE_MATRIX);
        Matrix m = t.getMatrix();
        m.reset();
        m.postRotate(180, child.getWidth() / 2.0f, child.getHeight() / 2.0f);
        return true;
    }
}
结果是:

RelativeLayout作为其父类ViewGroup,默认情况下不调用onDraw()。我正在寻找一个解决方案。嗯,我对安卓非常陌生,也许使用RelativeLayout不适合这些东西?我只是觉得它给了我在屏幕上放置元素时最大的灵活性,在这种情况下的“优势”也是劣势。。。这两个人不轮流,他们只是在适当的时候点击他们的角色>>,但这是一个有趣的解决方案,我从来没有想过直接在手机上“翻转”一个角色它可以工作!但子视图上的单击区域保持在与未旋转相同的位置。我怎么解决这个问题?