ProgressBar / ProgressDialog에 대한 사용자 정의 드로어 블
Google이 제공 한 제한된 문서를 읽으면 ProgressBar / ProgressDialog의 모양을 DrawBar의 style 속성에 할당하여 새 스타일을 만들면 간단하게 변경할 수 있습니다. 그러나 이것이 제대로 작동하도록 할 수는 없습니다. 여기까지 내가 한 일이 있습니다.
이런 모양을 만들었습니다 (mp2.xml)
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:innerRadiusRatio="4"
android:thicknessRatio="4"
android:useLevel="false">
<size android:width="50dip" android:height="50dip" />
<gradient android:type="sweep" android:useLevel="false" android:startColor="#300000ff" android:centerColor="#500000ff" android:endColor="#ff0000ff" />
</shape>
다음과 같이 애니메이션 (mp3.xml)을 만들었습니다.
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false">
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0" android:toDegrees="30" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="30" android:toDegrees="60" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="60" android:toDegrees="90" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="90" android:toDegrees="120" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="120" android:toDegrees="150" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="150" android:toDegrees="180" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="180" android:toDegrees="210" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="210" android:toDegrees="240" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="240" android:toDegrees="270" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="270" android:toDegrees="300" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="300" android:toDegrees="330" android:repeatCount="1" />
</item>
<item android:duration="70">
<rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/mp2" android:pivotX="50%" android:pivotY="50%" android:fromDegrees="330" android:toDegrees="360" android:repeatCount="1" />
</item>
</animation-list>
그런 다음 다음과 같은 스타일 (attrs.xml)을 작성했습니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style parent="@android:style/Widget.ProgressBar" name="customProgressBar">
<item name="android:progressDrawable">@anim/mp3</item>
</style>
</resources>
내 main.xml에서 다음과 같이 스타일을 설정했습니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" android:drawingCacheQuality="high">
<ProgressBar android:id="@+id/ProgressBar01"
android:layout_width="wrap_content"
android:layout_height="wrap_content" style="@style/customProgressBar"/>
</LinearLayout>
그러나 여전히 이전과 동일한 드로어 블을 보여줍니다. 내가 뭘 잘못하고 있죠?
사용자 정의 진행률 표시 줄을 만드는 데 다음을 사용했습니다.
파일 res/drawable/progress_bar_states.xml은 다른 상태의 색상을 선언합니다.
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background">
<shape>
<gradient
android:startColor="#000001"
android:centerColor="#0b131e"
android:centerY="0.75"
android:endColor="#0d1522"
android:angle="270"
/>
</shape>
</item>
<item android:id="@android:id/secondaryProgress">
<clip>
<shape>
<gradient
android:startColor="#234"
android:centerColor="#234"
android:centerY="0.75"
android:endColor="#a24"
android:angle="270"
/>
</shape>
</clip>
</item>
<item android:id="@android:id/progress">
<clip>
<shape>
<gradient
android:startColor="#144281"
android:centerColor="#0b1f3c"
android:centerY="0.75"
android:endColor="#06101d"
android:angle="270"
/>
</shape>
</clip>
</item>
</layer-list>
그리고 레이아웃 XML 내부의 코드 :
<ProgressBar android:id="@+id/progressBar"
android:progressDrawable="@drawable/progress_bar_states"
android:layout_width="fill_parent" android:layout_height="8dip"
style="?android:attr/progressBarStyleHorizontal"
android:indeterminateOnly="false"
android:max="100">
</ProgressBar>
즐겨!
몇 가지 작업과 시행 착오 후에 해결책이있는 불확정 진행 대화 상자를 사용하는 데 문제가있었습니다.
먼저 진행률 대화 상자에 사용할 애니메이션을 만듭니다. 제 경우에는 5 개의 이미지를 사용했습니다.
../res/anim/progress_dialog_icon_drawable_animation.xml :
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/icon_progress_dialog_drawable_1" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_2" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_3" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_4" android:duration="150" />
<item android:drawable="@drawable/icon_progress_dialog_drawable_5" android:duration="150" />
</animation-list>
ProgressDialog를 표시하려는 위치 :
dialog = new ProgressDialog(Context.this);
dialog.setIndeterminate(true);
dialog.setIndeterminateDrawable(getResources().getDrawable(R.anim.progress_dialog_icon_drawable_animation));
dialog.setMessage("Some Text");
dialog.show();
이 솔루션은 정말 간단하고 나를 위해 일했습니다 .ProgressDialog를 확장하여 드로어 블을 내부적으로 재정의 할 수는 있었지만, 내가 필요한 것에 비해 너무 복잡하여 수행하지 않았습니다.
설정을 시도하십시오.
android:indeterminateDrawable="@drawable/progress"
그것은 나를 위해 일했다. progress.xml의 코드도 다음과 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0"
android:toDegrees="360">
<shape android:shape="ring" android:innerRadiusRatio="3"
android:thicknessRatio="8" android:useLevel="false">
<size android:width="48dip" android:height="48dip" />
<gradient android:type="sweep" android:useLevel="false"
android:startColor="#4c737373" android:centerColor="#4c737373"
android:centerY="0.50" android:endColor="#ffffd300" />
</shape>
</rotate>
스타일은 다음과 같아야합니다.
<style parent="@android:style/Widget.ProgressBar" name="customProgressBar">
<item name="android:indeterminateDrawable">@anim/mp3</item>
</style>
규모에 따른 맞춤형 진행!
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:duration="150">
<scale
android:drawable="@drawable/face_no_smile_eyes_off"
android:scaleGravity="center" />
</item>
<item android:duration="150">
<scale
android:drawable="@drawable/face_no_smile_eyes_on"
android:scaleGravity="center" />
</item>
<item android:duration="150">
<scale
android:drawable="@drawable/face_smile_eyes_off"
android:scaleGravity="center" />
</item>
<item android:duration="150">
<scale
android:drawable="@drawable/face_smile_eyes_on"
android:scaleGravity="center" />
</item>
</animation-list>
나는 당신의 코드를 수행합니다. 나는 실행할 수 있지만 두 곳을 수정해야합니다.
name="android:indeterminateDrawable"대신에android:progressDrawableattrs.xml 이름 수정 ---> styles.xml
I'm not sure but in this case you can still go with a complete customized AlertDialog by having a seperate layout file set in the alert dialog and set the animation for your imageview using part of your above code that should also do it!
public class CustomProgressBar {
private RelativeLayout rl;
private ProgressBar mProgressBar;
private Context mContext;
private String color__ = "#FF4081";
private ViewGroup layout;
public CustomProgressBar (Context context, boolean isMiddle, ViewGroup layout) {
initProgressBar(context, isMiddle, layout);
}
public CustomProgressBar (Context context, boolean isMiddle) {
try {
layout = (ViewGroup) ((Activity) context).findViewById(android.R.id.content).getRootView();
} catch (Exception e) {
e.printStackTrace();
}
initProgressBar(context, isMiddle, layout);
}
void initProgressBar(Context context, boolean isMiddle, ViewGroup layout) {
mContext = context;
if (layout != null) {
int padding;
if (isMiddle) {
mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleSmall);
// mProgressBar.setBackgroundResource(R.drawable.pb_custom_progress);//Color.parseColor("#55000000")
padding = context.getResources().getDimensionPixelOffset(R.dimen.padding);
} else {
padding = context.getResources().getDimensionPixelOffset(R.dimen.padding);
mProgressBar = new ProgressBar(context, null, android.R.attr.progressBarStyleSmall);
}
mProgressBar.setPadding(padding, padding, padding, padding);
mProgressBar.setBackgroundResource(R.drawable.pg_back);
mProgressBar.setIndeterminate(true);
try {
color__ = AppData.getTopColor(context);//UservaluesModel.getAppSettings().getSelectedColor();
} catch (Exception e) {
color__ = "#FF4081";
}
int color = Color.parseColor(color__);
// color=getContrastColor(color);
// color__ = color__.replaceAll("#", "");//R.color.colorAccent
mProgressBar.getIndeterminateDrawable().setColorFilter(color, android.graphics.PorterDuff.Mode.SRC_ATOP);
}
}
RelativeLayout.LayoutParams params = new
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
rl = new RelativeLayout(context);
if (!isMiddle) {
int valueInPixels = (int) context.getResources().getDimension(R.dimen.padding);
lp.setMargins(0, 0, 0, (int) (valueInPixels / 1.5));//(int) Utils.convertDpToPixel(valueInPixels, context));
rl.setClickable(false);
lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
} else {
rl.setGravity(Gravity.CENTER);
rl.setClickable(true);
}
lp.addRule(RelativeLayout.CENTER_IN_PARENT);
mProgressBar.setScaleY(1.55f);
mProgressBar.setScaleX(1.55f);
mProgressBar.setLayoutParams(lp);
rl.addView(mProgressBar);
layout.addView(rl, params);
}
}
public void show() {
if (mProgressBar != null)
mProgressBar.setVisibility(View.VISIBLE);
}
public void hide() {
if (mProgressBar != null) {
rl.setClickable(false);
mProgressBar.setVisibility(View.INVISIBLE);
}
}
}
And then call
customProgressBar = new CustomProgressBar (Activity, true);
customProgressBar .show();
참고URL : https://stackoverflow.com/questions/2819778/custom-drawable-for-progressbar-progressdialog
'Programing' 카테고리의 다른 글
| Content-Type 헤더에 관계없이 Python Flask에서 원시 POST 본문 가져 오기 (0) | 2020.07.11 |
|---|---|
| Sublime Text와 같이 PyCharm에서 선택한 텍스트를 둘러싸는 방법 (0) | 2020.07.11 |
| SVN 405 방법이 허용되지 않습니다 (0) | 2020.07.11 |
| 최대 신장이있는 어린이 : 부모를 100 % 오버플로 (0) | 2020.07.11 |
| Windows에서 박쥐 파일을 사용하여 모든 내용이 들어있는 폴더를 삭제하는 방법은 무엇입니까? (0) | 2020.07.11 |