我们会在一些地方,见到一些滑动的图片,这时候我们可以通过ClickDrawable来实现此功能。
1.首先在drawable文件夹中实现一个clip的XML文件:
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/bottom_3"
android:clipOrientation="horizontal"
android:gravity="left">
</clip>
2.写一个活动的布局文件,其中的ImageView的src为该clip:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/tv_show"
android:layout_width="match_parent"
android:layout_height="500dp"
android:src="@drawable/clickdrawable_clip"/>
<SeekBar
android:id="@+id/seekbar"
android:layout_below="@id/tv_show"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
3.实现一个Activity(注释的为每秒钟显示百分之十,实现的为通过拖动下面的进度条可以控制图片的显示程度):
public class ClickDrawableAcitvity extends Activity {
private final int CLICK = 0;
private ImageView image;
private SeekBar seekBar;
private ClipDrawable clipDrawable;
// Handler handler = new Handler(){
// @Override
// public void handleMessage(Message msg) {
// if(msg.what == CLICK){
// //使用ClipDrawable对象时可以调用setLevel(int level)方法来设置截取的区域大小,当level为0时,截取的图片片段为空;当level为10000时,截取整张图片。
// clipDrawable.setLevel(clipDrawable.getLevel() + 1000);
// }
// }
// };
//实现通过SeekBar来进行显示图片
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
if(msg.what == CLICK){
//使用ClipDrawable对象时可以调用setLevel(int level)方法来设置截取的区域大小,当level为0时,截取的图片片段为空;当level为10000时,截取整张图片。
clipDrawable.setLevel(msg.arg1);
}
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.clickdrawbale_layout);
image = findViewById(R.id.tv_show);
seekBar = findViewById(R.id.seekbar);
//获取对象
clipDrawable = (ClipDrawable) image.getDrawable();
// //每1000毫秒进行一次发送信息操作,发送信息到主线程更改图片
// final Timer timer = new Timer();
// timer.schedule(new TimerTask() {
// @Override
// public void run() {
// Message msg = new Message();
// msg.what = CLICK;
// handler.sendMessage(msg);
// if(clipDrawable.getLevel() >= 10000){
// timer.cancel();
// }
// }
// }, 0, 1000);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
//当SeekBar发生变化时,该函数被调用
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
int max = seekBar.getMax();
double scale = (double) progress / (double) max;
Message message = new Message();
message.what = CLICK;
message.arg1 = (int) (10000 * scale);
handler.sendMessage(message);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
}