1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android移动应用开发之使用异步调用进度条及实现幻灯片切换效果

Android移动应用开发之使用异步调用进度条及实现幻灯片切换效果

时间:2022-03-02 08:37:21

相关推荐

Android移动应用开发之使用异步调用进度条及实现幻灯片切换效果

文章目录

异步调用进度条实现幻灯片切换效果

异步调用进度条

核心代码如下:

package scq.scq.asyntaskdemo;import androidx.appcompat.app.AppCompatActivity;import android.app.Dialog;import android.app.ProgressDialog;import android.os.AsyncTask;import android.os.Bundle;import android.os.SystemClock;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.Toast;public class MainActivity extends AppCompatActivity {ProgressDialog pd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button btnDialog = findViewById(R.id.btn);btnDialog.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {showDialog(1);new StringTask().execute();}});}// 创建AsynkTask子类private class StringTask extends AsyncTask<Void, Integer, Void>{public void printInfo(String info){Log.i("asyncTask", info+":Thread is" + Thread.currentThread().getName());}@Overrideprotected Void doInBackground(Void... voids) {pd.incrementProgressBy(-pd.getProgress());for(int i=0; i<=100; i++){publishProgress(i);printInfo("doInBackground" + i);SystemClock.sleep(50);}return null;}@Overrideprotected void onPostExecute(Void unused) {printInfo("onPostExecute");Toast.makeText(getApplicationContext(), "it is over!", Toast.LENGTH_LONG).show();super.onPostExecute(unused);}@Overrideprotected void onPreExecute() {printInfo("onPreExecute");Toast.makeText(getApplicationContext(), "it is begin!", Toast.LENGTH_LONG).show();super.onPreExecute();}@Overrideprotected void onProgressUpdate(Integer... values) {printInfo("onProgressUpdate");pd.incrementProgressBy(1);if(values[0] >= 100){pd.dismiss();}super.onProgressUpdate(values);}}@Overrideprotected Dialog onCreateDialog(int id) {pd = new ProgressDialog(this);pd.setMax(100);pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);pd.setTitle("完成进度");pd.setMessage("请稍等...");pd.setCancelable(false);return pd;}}

示例完整代码

实现幻灯片切换效果

实现思路还是比较简单,就是创建一个线程,然后永真循环,然后根据计数余数确定改呈现什么样的内容。

核心代码如下:

首先线程类:

package scq.scq.handlertest;public class MyThread extends Thread{MainActivity activity;int what = 0;public MyThread(MainActivity activity){this.activity = activity;}@Overridepublic void run() {while (true){this.activity.handler.sendEmptyMessage((what++)%5);try{Thread.sleep(300);}catch (Exception e){e.printStackTrace();}}}}

因为每次停留300ms然后进行切换。

然后MainActivity中使用Handler根据余数切换内容:

package scq.scq.handlertest;import androidx.annotation.NonNull;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.ImageView;import android.widget.TextView;public class MainActivity extends AppCompatActivity {TextView tvContent;ImageView ivPic;Handler handler = new Handler(){@Overridepublic void handleMessage(@NonNull Message msg) {switch (msg.what) {case 0:tvContent.setText(R.string.andy);ivPic.setImageResource(R.drawable.andy);break;case 1:tvContent.setText(R.string.bill);ivPic.setImageResource(R.drawable.bill);break;case 2:tvContent.setText(R.string.edgar);ivPic.setImageResource(R.drawable.edgar);break;case 3:tvContent.setText(R.string.torvalds);ivPic.setImageResource(R.drawable.torvalds);break;case 4:tvContent.setText(R.string.turing);ivPic.setImageResource(R.drawable.turing);break;}super.handleMessage(msg);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.ivPic = findViewById(R.id.ivPic);this.tvContent = findViewById(R.id.tvContent);MyThread myThread = new MyThread(this);myThread.start();}}

示例完整代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。