原文来自于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值遍可以得到图片渐进渐出的效果了
下面加上实现后的效果图:
这是一个按钮的渐进渐出效果,实现起来很简单我们下面就开始仿照这个效果做一个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值遍可以得到图片渐进渐出的效果了
下面加上实现后的效果图: