0

私は XML ドローアブルを使用しており、レイヤーを使用して動的に重ね合わせています。ユーザーがボタンを押すたびに、別の画像がオーバーレイされます。問題は、この特定の XML ドローアブルのレイヤーが 5 つまたは 10 あると、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();
    }
}

しかし、別の XML ドローアブルを使用すると、同じ 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>

EDIT また、ドローアブルへの参照の横に奇妙なエラー アイコンが表示されます。クリックすると、ドローアブルに移動します。それが私の問題に関連しているのか、それが本当のエラーなのか、それとも単なる通知なのか、私にはわかりません。

エラー画像

4

0 に答える 0