优化版本 v2: 进入
1.实现思路:
计算progressBar的宽度,计算屏幕的宽度。根据currentProgress()计算出,progress点在屏幕上的偏移量。然后不断更新偏移量!
这里使用线性布局,嵌套两个TextView
(如果不需要实时更新,定义一个TextView 通过偏移量动态更新TextView的setPadding(leftPadding,0,0,0),如果需要动态更新,就需要定义两个组件。给前一个设置leftPadding,第二个设置具体跟随浮动的内容)。
2.上效果图
3.使用场景:
对于精度要求不高的需求可以使用。因为上面的偏移量和下面的进度有些许的偏差。
4.对比:
市面上同类解决方案,该方式代码量少。容易上手。扩展容易。缺点就是上下位置有偏差。
贴代码:
布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/text_white"
android:orientation="vertical">
<LinearLayout
android:id="@+id/line_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txt_cursor"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/progress_txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/icon_gas_bg"
android:gravity="center"
android:lines="1"
android:textColor="@color/text_white"
android:textSize="8sp"
android:visibility="gone" />
LinearLayout>
<SeekBar
android:id="@+id/seekBar_progressBar"
android:layout_width="match_parent"
android:layout_height="2dp"
android:layout_gravity="center_vertical"
android:layout_marginLeft="@dimen/width_35"
android:layout_marginRight="@dimen/width_35"
android:layout_marginTop="10dp"
android:maxHeight="2dp"
android:padding="-2dp"
android:progressDrawable="@drawable/progress_background"
android:thumb="@null"
android:thumbOffset="0dp" />
<TextView
android:id="@+id/txt_bytevalue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="15dp" />
<ImageView
android:id="@+id/img_close_pdfdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="143dp" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:text="New Button" />
LinearLayout>
LinearLayout>
代码块:
package com.example.payui;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.DisplayMetrics;
import android.view.View;
import android.widget.SeekBar;
import android.widget.TextView;
import java.util.Timer;
import java.util.TimerTask;
public class MainActivity extends Activity {
private SeekBar customSeekBar;
private TextView txtCur;
private int screenWidth;
private int defaultOff;
private TextView progress_txt;
private TextView txt_bytevalue;
private int temp = 0;
int count = 0;
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
showProgressLoading(msg.what);
showDownLoadingText(msg.what, 555524);
return false;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pdfactivity);
DisplayMetrics displayMetrics = getDisplayMetrics(this);
screenWidth = displayMetrics.widthPixels;
defaultOff = (int) getResources().getDimension(R.dimen.width_35) * 2;
txtCur = (TextView) findViewById(R.id.txt_cursor);
txt_bytevalue = (TextView) findViewById(R.id.txt_bytevalue);
progress_txt = (TextView) findViewById(R.id.progress_txt);
customSeekBar = (SeekBar) findViewById(R.id.seekBar_progressBar);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
customSeekBar.setProgress(0);
count = 0;
initValue();
}
});
initValue();
}
public void initValue() {
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
final int go = count++;
if (go <= 100) {
Message message = Message.obtain();
message.what = go;
handler.sendMessage(message);
}
}
}, 0, 300);
}
private void showProgressLoading(long progress) {
final int progressWidth = screenWidth - defaultOff;
int offLeftWidth = (int) getResources().getDimension(R.dimen.width_35);
int endPosition = screenWidth - (int) getResources().getDimension(R.dimen.width_35);
int startPositon = (int) (progress * (progressWidth / 100)) + offLeftWidth;
int offPosition = startPositon > endPosition ? endPosition : startPositon;
if (progress == 0) {
txtCur.setPadding(offLeftWidth, 0, 0, 0);
} else if (progress == 100) {
txtCur.setPadding(progressWidth + (int) getResources().getDimension(R.dimen.width_23), 0, 0, 0);
} else {
txtCur.setPadding(offPosition, 0, 0, 0);
}
progress_txt.setText(progress + "%");
customSeekBar.setProgress((int) progress);
}
private void showDownLoadingText(long progress, long fileSize) {
if (progress >= 1) {
progress_txt.setVisibility(View.VISIBLE);
}
temp = (int) (fileSize / 100);
txt_bytevalue.setText("DownLoading..." + (progress < 100 ? progress * temp : fileSize) + "k/" + fileSize + "k");
}
public static DisplayMetrics getDisplayMetrics(Context context) {
DisplayMetrics dm = null;
if (context != null) {
dm = new DisplayMetrics();
dm = context.getApplicationContext().getResources().getDisplayMetrics();
return dm;
}
return new DisplayMetrics();
}
}
这段代码只作为学习使用参考;