仿android手机qq消息列表中删除按钮效果

本文详细介绍了如何使用ClipDrawable在Android中实现按钮的渐进渐出效果,包括XML配置和相应的代码实现。通过将资源指向图片、设置渐变方向和开始方向,可以创建出动态的视觉效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文来自于http://blog.youkuaiyun.com/softrain624?viewmode=contents
这是一个按钮的渐进渐出效果,实现起来很简单我们下面就开始仿照这个效果做一个demo。
这个效果实现起来其实还是很简单的最关键的就是知道ClipDarwable这个东东,下面开一个文件:文件名:clipdrawable.xml
<?xml version="1.0" encoding="UTF-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
    android:drawable="@drawable/fee_logo"
    android:clipOrientation="horizontal"
    android:gravity="right" />
这个xml文件放置在drawalbe文件夹下,android:drawable="@drawable/fee_logo"  将这个资源指向你想要添加效果的图片;android:clipOrientation="horizontal" 这个可以设置渐变的方向是水平还是垂直;android:gravity="right" 这个可以设置效果开始的方向。写好后你就可以像其他的图片资源一样使用这个xml文件了。
使用例子:
 <ImageView 
        android:id="@+id/image"
        android:layout_below="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/clipdrawable"
        android:visibility="gone"
        />
接下来在Activity中使用这个drawable让它产生效果
public class MainActivity extends Activity {




TextView textView;
ImageView image;
ClipDrawable drawable;

final int UPDATA_MSG_INCREASE = 10240;
final int UPDATA_MSG_DECREASE = 10241;

Handler mhHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATA_MSG_INCREASE:
if(drawable.getLevel() < 10000){
drawable.setLevel(drawable.getLevel() + 300);
mhHandler.sendEmptyMessageDelayed(UPDATA_MSG_INCREASE, 10);
}
break;
case UPDATA_MSG_DECREASE:
if(drawable.getLevel() > 0){
drawable.setLevel(drawable.getLevel() - 300);
mhHandler.sendEmptyMessageDelayed(UPDATA_MSG_DECREASE, 10);
}else{
image.setVisibility(View.GONE);
}
break;
default:
break;
}
}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = (TextView) findViewById(R.id.button);
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
image.setVisibility(View.VISIBLE);
if(drawable.getLevel() < 10000)
mhHandler.sendEmptyMessage(UPDATA_MSG_INCREASE);
else
mhHandler.sendEmptyMessage(UPDATA_MSG_DECREASE);
}
});

image = (ImageView) findViewById(R.id.image);
drawable = (ClipDrawable) image.getDrawable();

image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "do sth", Toast.LENGTH_LONG).show();
}
});
}
}
从上面代码可以看到
image = (ImageView) findViewById(R.id.image);   //找到使用drawable的view
drawable = (ClipDrawable) image.getDrawable(); //得到这个view的drawable对象并将其转化成ClipDrawable对象
ClipDarwalbe对象将整个drawable划分成10000份,我们通过drawable.setLevel(drawable.getLevel() + 300);的setLevel方法设置0-10000之间的值可以部分显示这个drawable,然后通过定时器定时改变这个level值遍可以得到图片渐进渐出的效果了
下面加上实现后的效果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值