1、progressBar
progressBar ,进度条,是一个显示进度的控件。
public class MainActivity extends AppCompatActivity {
private ProgressBar mCirclrBar;
private ProgressBar mRecBar;
private Button mStart;
private int count;
private final int GUI_STOP_NOTIFIER = 100;
private final int GUI_THREADING_NOTIFIER = 50;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
mStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mRecBar.setVisibility(View.VISIBLE);
mCirclrBar.setVisibility(View.VISIBLE);
//设置最大值
mCirclrBar.setMax(100);
mRecBar.setMax(100);
//设置当前值
mCirclrBar.setProgress(0);
mRecBar.setProgress(0);
mRecBar.setSecondaryProgress(0);
//通过线程改变ProgressBar的值
new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i < 10; i++) {
try {
count = (i + 1) * 10;
Thread.sleep(100);
if(i == 9) {
//发送消息,中断线程
Message m = new Message();
m.what = GUI_STOP_NOTIFIER;
MainActivity.this.myHandler.sendEmptyMessage(m.what);
}
else {
Message m = new Message();
m.what = GUI_THREADING_NOTIFIER;
MainActivity.this.myHandler.sendEmptyMessage(m.what);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}).start();
}
});
}
Handler myHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case GUI_STOP_NOTIFIER:
//完成进度,隐藏ProgressBar
mCirclrBar.setVisibility(View.GONE);
mRecBar.setVisibility(View.GONE);
Thread.currentThread().interrupt();
break;
case GUI_THREADING_NOTIFIER:
if(!Thread.currentThread().isInterrupted()) {
mCirclrBar.setProgress(count);
mRecBar.setProgress(count);
mRecBar.setSecondaryProgress(count / 2);
}
break;
default: break;
}
super.handleMessage(msg);
}
};
private void initView() {
mCirclrBar = findViewById(R.id.circlrBar);
mRecBar = findViewById(R.id.recBar);
mStart = findViewById(R.id.start);
}
}
bar.xml
<?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/suo"
/>
<item
android:id="@android:id/progress"
android:drawable="@drawable/jiesuo"
/>
<item
android:id="@android:id/secondaryProgress"
android:drawable="@drawable/suozi"
/>
</layer-list>
activity_main.xml
<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.admin.vip_05.MainActivity"
android:orientation="vertical"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Progress使用实例"
android:textSize="20sp"
/>
<!--圆形进度条-->
<ProgressBar
android:id="@+id/circlrBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<!--长方形进度条-->
<ProgressBar
android:id="@+id/recBar"
android:progressDrawable="@drawable/bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
/>
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开始" />
</LinearLayout>
background为灰色的锁,progress为绿色的锁,secondaryProgress为灰色的锁。
2、seekBar
private SeekBar mBar;
private TextView mTextView;
int seekData = 0;
手动改变进度条的位置:
mBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
mTextView.setText("当前进度为:" + progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
自动改变进度条位置:
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
if (mBar.getProgress() == 100) {
mBar.setProgress(0);
seekData = 0;
}
mBar.setProgress(seekData += 5);
String src = "" + seekData;
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
3、layer-list
3.1 边线效果
<!--使用蓝色填充-->
<item>
<shape>
<solid android:color="#40ff00"/>
</shape>
</item>
<!--距离顶层与底层1dp-->
<item android:top="1dp"
android:bottom="1dp"
>
<shape>
<solid android:color="#e2a3a3"/>
</shape>
</item>
相当于先用一个绿色背景,后再用一个红色背景覆盖,并在上下各留出1dp的大小,达到边线的效果。
3.2 阴影效果
<item android:left="3dp"
android:top="6dp"
>
<shape>
<solid android:color="#b4b5b6"/>
</shape>
</item>
<item android:bottom="6dp"
android:right="3dp"
>
<shape>
<solid android:color="#fff"/>
</shape>
</item>
这里textView的高度改为50pdp,会好一些。
这里设置一些比较大的值,来显示一下各个参数的含义。
3.3 缩放效果
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap
android:src="@drawable/suo"
/>
</item>
<item
android:left="50dp"
android:top="50dp"
>
<bitmap android:src="@drawable/suo"
/>
</item>
<item
android:left="70dp"
android:top="70dp"
>
<bitmap android:src="@drawable/suo"
/>
</item>
</layer-list>
3.4 平移效果
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:gravity="center">
<bitmap
android:src="@drawable/suo"
/>
</item>
<item
android:left="10dp"
android:top="10dp"
android:gravity="center"
>
<bitmap android:src="@drawable/suo"
/>
</item>
<item
android:left="20dp"
android:top="20dp"
android:gravity="center"
>
<bitmap android:src="@drawable/suo"
/>
</item>
</layer-list>