Android XML shape drawable让我的UI陷入困境
我正在使用XML绘图,并使用层动态地将它们覆盖在彼此的顶部。每次用户点击一个按钮,它就会覆盖另一个图像。问题是,一旦我有了五到十层这个特定的XML可绘制层,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 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
类?