1. 程式人生 > >仿android手機qq訊息列表中刪除按鈕效果

仿android手機qq訊息列表中刪除按鈕效果

原文來自於http://blog.csdn.net/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值遍可以得到圖片漸進漸出的效果了
下面加上實現後的效果圖: