Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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/0/xml/15.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
Android XML shape drawable让我的UI陷入困境_Android_Xml_Android Drawable_Android Shape - Fatal编程技术网

Android XML shape drawable让我的UI陷入困境

Android XML shape drawable让我的UI陷入困境,android,xml,android-drawable,android-shape,Android,Xml,Android Drawable,Android Shape,我正在使用XML绘图,并使用层动态地将它们覆盖在彼此的顶部。每次用户点击一个按钮,它就会覆盖另一个图像。问题是,一旦我有了五到十层这个特定的XML可绘制层,UI就会想要锁定。这是可提取的: <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <rot

我正在使用XML绘图,并使用层动态地将它们覆盖在彼此的顶部。每次用户点击一个按钮,它就会覆盖另一个图像。问题是,一旦我有了五到十层这个特定的XML可绘制层,UI就会想要锁定。这是可提取的:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <rotate
            android:fromDegrees="247.5"
            android:toDegrees="247.5"
            android:pivotX="50%"
            android:pivotY="50%">
            <shape android:shape="oval">
                <size
                    android:width="800dp"
                    android:height="800dp"/>
                <stroke
                    android:dashWidth="235.6dp"
                    android:dashGap="5000.01dp"
                    android:width="200dp"
                    android:color="#c2272d" />
            </shape>
        </rotate>
    </item>
    <item android:top="0dp" android:bottom="0dp" android:left="0dp" android:right="0dp">
        <rotate
            android:fromDegrees="247.5"
            android:toDegrees="247.5"
            android:pivotX="50%"
            android:pivotY="50%">
            <shape android:shape="oval">
                <size
                    android:width="800dp"
                    android:height="800dp"/>
                <stroke
                    android:dashWidth="290.6dp"
                    android:dashGap="5000.01dp"
                    android:width="60dp"
                    android:color="#767171" />
            </shape>
        </rotate>
    </item>
</layer-list>

下面是我用来显示和更新的代码:

public class ShotMagFragment extends Fragment implements DataDelegate, View.OnClickListener{

    private ImageView mainImage;
    private ArrayList<Drawable> layers = new ArrayList<>();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_shot_mag, container, false);
        View simulateBtn = view.findViewById(R.id.simulateBtn);
        simulateBtn.setOnClickListener(this);
        mainImage = (ImageView)view.findViewById(R.id.mainImage);
        return view;
    }


    public void displayNewImage() {
        Random r = new Random();
        int number = 1 + (20 - 20) * r.nextInt();
        Drawable d = getResources().getDrawable(getResources().getIdentifier("mag_shade" + number, "drawable", getContext().getPackageName()));
        layers.add(d);

        final LayerDrawable layerDrawable = new LayerDrawable(layers.toArray(new Drawable[layers.size()]));
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                mainImage.setImageDrawable(layerDrawable);
            }
        });
    }
    @Override
    public void onClick(View v) {
        displayNewImage();
    }
}
公共类ShotMagFragment扩展片段实现DataDelegate、View.OnClickListener{
私有图像查看主图像;
私有ArrayList层=新建ArrayList();
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.fragment\u shot\u mag,容器,假);
View-simulateBtn=View.findViewById(R.id.simulateBtn);
simulateBtn.setOnClickListener(此);
mainImage=(ImageView)view.findViewById(R.id.mainImage);
返回视图;
}
public void displayNewImage(){
随机r=新随机();
整数=1+(20-20)*r.nextInt();
Drawable d=getResources().getDrawable(getResources().getIdentifier(“mag_shade”+数字,“Drawable”,getContext().getPackageName());
添加(d);
最终LayerDrawable LayerDrawable=新的LayerDrawable(layers.toArray(新的Drawable[layers.size());
getActivity().runOnUiThread(新的Runnable()){
@凌驾
公开募捐{
mainImage.setImageDrawable(layerDrawable);
}
});
}
@凌驾
公共void onClick(视图v){
displayNewImage();
}
}
但当我使用不同的XML drawable时,我不会遇到相同的UI锁定问题:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="130dp" android:bottom="130dp" android:left="130dp" android:right="130dp">
        <rotate
            android:fromDegrees="247.5"
            android:toDegrees="247.5"
            android:pivotX="50%"
            android:pivotY="50%">
            <shape android:shape="oval">
                <size
                    android:width="540dp"
                    android:height="540dp"/>
                <stroke
                    android:dashWidth="212.0dp"
                    android:dashGap="5000.01dp"
                    android:width="4dp"
                    android:color="#fff" />
            </shape>
        </rotate>
    </item>
</layer-list>

编辑 在我对我的drawable的引用旁边,我还得到了一个奇怪的错误图标。当我点击它时,它只会把我带到绘图平台。我不知道这是否与我的问题有关,是否是一个真正的错误,或者是否只是一个通知


你到底想实现什么?我希望能够动态地将这些图像叠加在一起,而不会让应用程序失去响应。也许你的xml drawable太复杂了,这就是为什么它会阻塞的原因,试图使用
ShapeDrawable
自定义
Shape
类?