Android 사용자 정의 Dialog 텍스트 동적 로드 효과 구현
시도 해 보 니 가장 멍청 한 방식 으로 이 루어 졌 다.먼저 효과 보기:
저 는 Dialog 를 사용자 정의 하여 불 러 오 는 효 과 를 Dialog 내부 에서 이 루어 졌 습 니까?진 도 는 Activity 에서 제어 되 었 습 니까?
다음은 Dialog 구현 클래스:
public class CustomDialog extends AlertDialog {
public CustomDialog(Context context) {
super(context);
}
private TextView tv_loading;
private ProgressBar progressBar;
private Timer timer;
private int count = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_progress);
tv_loading = (TextView) findViewById(R.id.tv_loading);
progressBar = (ProgressBar) findViewById(R.id.pb);
// Dialog ,
Display d = getWindow().getWindowManager().getDefaultDisplay();
WindowManager.LayoutParams lp = getWindow().getAttributes();
//
lp.width = (int) (d.getWidth() * 0.8);
getWindow().setAttributes(lp);
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(0);
}
}, 300, 300);
setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (timer != null) {
timer.cancel();
}
}
});
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
count++;
if (count > 3) {
count = 1;
}
switch (count) {
case 1:
tv_loading.setText(" .");
break;
case 2:
tv_loading.setText(" ..");
break;
case 3:
tv_loading.setText(" ...");
break;
}
}
};
public void setProgress(int progress) {
progressBar.setProgress(progress);
if (progress == 100) {
this.dismiss();
}
}
}
레이아웃 파일 은 TextView 하나,ProgressBar 하나,dialog_progress.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/shape_dialog_bg"
android:orientation="vertical"
android:padding="10dp">
<TextView
android:id="@+id/tv_loading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="20dp"
android:text=" ..."
android:textSize="16sp" />
<ProgressBar
android:id="@+id/pb"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="10dp"
android:max="100"
android:progressDrawable="@drawable/layer_list_progress_drawable" />
</LinearLayout>
다른 생각 을 하지 못 했 기 때문에 타이머 로 시간 을 재 서 TextView 의 디 스 플레이 를 바 꿀 수 밖 에 없습니다.여기 서도 여러분 이 지적 해 주 셨 으 면 좋 겠 습 니 다.지금 은 다른 생각 이 생각 나 지 않 습 니 다)ProgressBar 의 스타일,전편Android 사용자 정의 수평 진도 바 의 원 각 진도안에 상세 한 소개 가 있 으 면 중복 되 지 않 습 니 다.
Dialog 는 그렇습니다.그리고 호출 되 었 습 니 다.
MainActivity.class
public class MainActivity extends FragmentActivity {
private CustomDialog customDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
customDialog = new CustomDialog(this);
}
private int count = 0;
public void tvClick(View view) {
customDialog.show();
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
count += 10;
runOnUiThread(new Runnable() {
@Override
public void run() {
if (customDialog != null && customDialog.isShowing()) {
customDialog.setProgress(count);
}
}
});
if (count >= 100) {
timer.cancel();
}
}
}, 0, 500);
customDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (timer != null) timer.cancel();
count = 0;
}
});
}
}
여기 도 타이머 로 로드 진 도 를 모 의 하 는 것 입 니 다.이 벤트 를 클릭 하면 xml 에서 직접 호출 합 니 다.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:clickable="true"
android:onClick="tvClick"
android:padding="10dp"
android:text=" " />
clickable 속성 을 추가 하지 않 으 면 일부 휴대 전화 시스템 은 기본적으로 호출 할 수 없습니다.또한,이러한 click 이벤트 의 작성 방법 은 Fragment 에서 사용 할 수 없 으 며,setOnClickListener 를 통 해서 만 실행 할 수 있 습 니 다.
구현 방식 업데이트:
IT-hero 에 감 사 드 립 니 다.또 하나의 속성 애니메이션 의 용법 을 얻 었 습 니 다.
다음은 사용자 정의 Dialog 의 조정 사항 입 니 다.
private String[] scoreText = {". ", ".. ", "..."};
ValueAnimator valueAnimator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_progress);
tv_loading = (TextView) findViewById(R.id.tv_loading);
progressBar = (ProgressBar) findViewById(R.id.pb);
// Dialog ,
Display d = getWindow().getWindowManager().getDefaultDisplay();
WindowManager.LayoutParams lp = getWindow().getAttributes();
//
lp.width = (int) (d.getWidth() * 0.8);
getWindow().setAttributes(lp);
if (valueAnimator == null) {
valueAnimator = ValueAnimator.ofInt(0, 3).setDuration(1000);
valueAnimator.setRepeatCount(ValueAnimator.INFINITE);
valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int i = (int) animation.getAnimatedValue();
tv_loading.setText(" " + scoreText[i % scoreText.length]);
}
});
}
valueAnimator.start();
}
// ...
CSDN 편집 이 자원 을 업로드 하 는 방식 을 찾 지 못 했 기 때문에 여기 Demo 에는 이 속성 애니메이션 의 코드 가 추가 되 지 않 았 습 니 다.필요 한 친구 가 있 으 면 바로 여기 서 copy 할 수 있 습 니 다.다운로드 클릭:소스 코드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.