Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.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 以编程方式将视图添加到约束布局,并跳转到原点_Java_Android_Programmatically_Android Constraintlayout - Fatal编程技术网

Java 以编程方式将视图添加到约束布局,并跳转到原点

Java 以编程方式将视图添加到约束布局,并跳转到原点,java,android,programmatically,android-constraintlayout,Java,Android,Programmatically,Android Constraintlayout,我正在用android做一些动画,我有球员在足球场里。对于我想要添加标签的某些元素,添加一些约束以将它们与各自的视图分组,并且当动画开始时,标签会跟随它们 我尝试了这两种解决方案,但textview一直跳转到约束布局的原点: 我尝试了很多不同的解决方案,但都没有成功。我错过了一些东西当然…任何想法都将不胜感激 创建视图的代码: //init imageview ImageView imageView = new ImageView(this);

我正在用android做一些动画,我有球员在足球场里。对于我想要添加标签的某些元素,添加一些约束以将它们与各自的视图分组,并且当动画开始时,标签会跟随它们

我尝试了这两种解决方案,但textview一直跳转到约束布局的原点:

我尝试了很多不同的解决方案,但都没有成功。我错过了一些东西当然…任何想法都将不胜感激

创建视图的代码:

   //init imageview
                ImageView imageView = new ImageView(this);
                imageView.setId(View.generateViewId());
                imageView.setTag(key);
                imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
                //buscar el drawable correspondiente
                imageView.setImageDrawable(setViewDrawable(vista));
                imageView.setOnLongClickListener(this);
//set width and height of the view
                Pair<Integer, Integer> widthAndHeight = getWidthAndHeight(key);
                //set ancho y alto
                ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(widthAndHeight.first, widthAndHeight.second);
                imageView.setLayoutParams(params);
                mTacticLayout.addView(imageView);
                //set position
                if (!isEdit) {
                    Pair<Float, Float> xAndY = getViewXY(key);
                    Float rotation = getViewRotation(key);
                    //account for offsets
                    imageView.setX(xAndY.first - widthAndHeight.first / 2);
                    imageView.setY(xAndY.second - widthAndHeight.second / 2);
                    imageView.setRotation(rotation);
                }

//HERE HERE HERE LOOK AT ME  
       if(imageView.getTag().toString().equals(r.getString(R.string.ball_tag))){
                    TextView textView = new TextView(this);
                    textView.setId(View.generateViewId());
                    textView.setText("My View");

                    mTacticLayout.addView(textView);
                    ConstraintSet set = new ConstraintSet();
                    set.clone(mTacticLayout);
                    set.connect(textView.getId(), ConstraintSet.TOP, imageView.getId(), ConstraintSet.BOTTOM, 0);
                    set.connect(textView.getId(), ConstraintSet.RIGHT, imageView.getId(), ConstraintSet.RIGHT, 0);
                    set.connect(textView.getId(), ConstraintSet.LEFT, imageView.getId(), ConstraintSet.LEFT, 0);
                    set.applyTo(mTacticLayout);
                }
//init imageview
ImageView ImageView=新的ImageView(此);
setId(View.generateViewId());
设置标签(键);
imageView.setScaleType(imageView.ScaleType.FIT_CENTER);
//客车el可拉拔对应件
setImageDrawable(setViewDrawable(vista));
setOnLongClickListener(此);
//设置视图的宽度和高度
对宽度和高度=获取宽度和高度(键);
//安科和阿尔托
ViewGroup.LayoutParams params=新的ViewGroup.LayoutParams(widthAndHeight.first,widthAndHeight.second);
imageView.setLayoutParams(参数);
mTacticLayout.addView(imageView);
//设定位置
如果(!isEdit){
对xAndY=getViewXY(键);
浮动旋转=getViewRotation(关键点);
//抵消账户
imageView.setX(xAndY.first-宽度和高度.first/2);
图像视图.setY(xAndY.second-宽度和高度.second/2);
设置旋转(旋转);
}
//看看我
if(imageView.getTag().toString().equals(r.getString(r.string.ball_标记))){
TextView TextView=新的TextView(此);
setId(View.generateViewId());
setText(“我的视图”);
mTacticLayout.addView(textView);
ConstraintSet集合=新ConstraintSet();
set.clone(mTacticLayout);
set.connect(textView.getId(),ConstraintSet.TOP,imageView.getId(),ConstraintSet.BOTTOM,0);
set.connect(textView.getId(),ConstraintSet.RIGHT,imageView.getId(),ConstraintSet.RIGHT,0);
set.connect(textView.getId(),ConstraintSet.LEFT,imageView.getId(),ConstraintSet.LEFT,0);
set.applyTo(MTATICLAYOUT);
}
setX()
根据

设置此视图的可视x位置(以像素为单位)。这相当于将translationX属性设置为传入的x值与当前left属性之间的差值

setTranslationX()
也根据以下规则执行此操作:

设置此视图相对于其左侧位置的水平位置。这将有效地定位对象的后期布局,以及对象的布局所放置的位置

setY()
setTranslationY()
对y坐标执行相同的操作

这里的关键短语是post布局。您的
ImageView
被放置在顶部/左侧,因为它没有约束。根据约束条件,
TextView
被放置在
ImageView
上,因此它也被放置在顶部/左侧。既然两个视图都在上/左视图中,则
ImageView
将根据
setX()
setY()
进行移动,而将
TextView
放在后面


有几种方法可以解决这个问题。可能最简单的方法是将应用于
ImageView
的相同翻译应用于
TextView

这有点困难,但是用XML定义一个组,并通过代码查看该组视图我来试试!动画开始时标签会移动吗?你的猜测是什么?@Koopa不能说它是否会出现在动画中。因此,在将翻译应用到TextView后,标签会正确地放置在ImageView下面。但是,在设置动画(包括拖放ImageView)后,标签不会跟随ImageView。标签的边距一直保持在零(可能是“希望”边距适应了,不知怎么的,我可以解决这个问题)。@Koopa这将是下一个问题。如果<代码>文本视图< /代码>和 IVIEVIEW 总是在一起,您可能需要考虑.HMM,永远不要使用它们。我会看看它是否适合我的情况,特别是考虑到我的视图有拖放和旋转交互。干杯