以前就想知道,诊断时高大上的动画是怎么实现的,目前还是不知道人家是怎么实现的,但是用这种方式也差不多能实现。
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background" android:drawable="@drawable/car_one" />
<item android:id="@android:id/secondaryProgress" android:drawable="@drawable/car_one" />
<item android:id="@android:id/progress" android:drawable="@drawable/car_two" />
</layer-list>
两张不一样颜色的图片,通过设置各项属性,使ProgressBar/SeekBar的背景和进度条都设置为图片。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_scan"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.example.testapplication.ScanActivity">
<SeekBar
android:id="@+id/sb_custom"
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="200dp"
android:max="100"
android:progressDrawable="@drawable/progress_bar_back"/>
<TextView
android:id="@+id/tv_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginTop="120dp"
android:text="adfadfafafadfadfas"/>
</LinearLayout>
设置完成,
public class ScanActivity extends AppCompatActivity {
SeekBar seekBar;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
seekBar.setProgress(msg.what);
timerDown();
}
};
private int iCount = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scan);
seekBar = (SeekBar) findViewById(R.id.sb_custom);
final TextView tv_value = (TextView) findViewById(R.id.tv_value);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
tv_value.setText(progress + "");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
Message message = handler.obtainMessage();
message.what = iCount;
handler.sendMessageDelayed(message,1000);
}
private void timerDown(){
if (iCount <=100) {
iCount++;
Message message = handler.obtainMessage();
message.what = iCount;
handler.sendMessageDelayed(message, 50);
}
}
}
没仔细写,反正就是这么个意思~~~还可以进行优化,Thumb可以设置为自定义的。
添加:背景图缩放大小问题,目前是首先确定进度条的大小,然后根据大小让UI设计符合要求的图片。要是能用.9就更简单了
DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int widthPiexls = metrics.widthPixels; Drawable drawable = getDrawable(R.drawable.img_radio_pb_volume_bg); pbRadioVolume.setIndeterminateDrawable(drawable); LogUtil.info(TAG, "声音进度条像素数_" + widthPiexls + pbRadioVolume.getWidth());
根据pbRadioVolume.getWidth(),获取两张背景图的像素值,重新构图,之后加进去就行了。