canvas教程

领略千变万化的Android Drawable (二)(4)

字号+ 作者:H5之家 来源:H5之家 2017-02-15 08:03 我要评论( )

在上面的xml中我们实现了左侧裁剪的效果,因此应将clipOrientation设置为水平方向裁剪,gravity要设置为right。然后应用到我的ImageView上代码如下: ImageView android:id="@+id/clipImage" android:layout_width=

在上面的xml中我们实现了左侧裁剪的效果,因此应将clipOrientation设置为水平方向裁剪,gravity要设置为right。然后应用到我的ImageView上代码如下:



ImageView
android:id="@+id/clipImage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:background="@drawable/clip_drawable"
/>
ImageView android:id="@+id/clipImage"android:layout_width="wrap_content"android:layout_height="wrap_content" android:layout_centerInParent="true" android:background="@drawable/clip_drawable" />

接着在代码中设置ClipDrawable的等级,代码如下:



ImageView clipImage= (ImageView) findViewById(R.id.clipImage);
ClipDrawable clip= (ClipDrawable) clipImage.getBackground();
clip.setLevel(6000);
ImageView clipImage= (ImageView) findViewById(R.id.clipImage);ClipDrawable clip= (ClipDrawable) clipImage.getBackground();clip.setLevel(6000);

因为这里我们在xml引用时设置的是背景图所以使用clipImage.getBackground(),如果在xml引用时使用的是src,那么就使用clipImage.getDrawable()即可。前面我们已经提到过,ClipDrawable的等级范围是[0,10000],而且level越大裁剪区域越少,当level=10000时,表示不裁剪,我们在这里设置了level为6000则表示裁剪40%的区域,效果如下:



最后我们来实现一个案例,在实际开发中经常会使用到动画来实现一些特殊效果,比如我们可能需要实现一个徐徐展开的图片,这时我们的ClipDrawable就派上用场了,接着我们就是利用ClipDrawable来实现一个拥有徐徐展开效果的图片


思路:


因为ClipDrawable的setLevel(int level)可以控制截取图片的部分,因此我们可以设置一个定时器,让程序每隔一段时间就调用ClipDrawable的setLevel(int level)方法即可实现图片徐徐展开效果。
我们首先来实现一个clip_drawable_image.xml,并设置clipOrientation=”horizontal”,即水平剪切,以及设置gravity=”center”,即左右同时裁剪,代码如下:



<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/image1"
android:clipOrientation="horizontal"
android:gravity="center">
</clip>
<?xml version="1.0" encoding="utf-8"?><clip xmlns:android="http://schemas.android.com/apk/res/android"android:drawable="@drawable/image1"android:clipOrientation="horizontal"android:gravity="center"></clip>

接着在activity_clip.xml文件布局中引用:



RelativeLayout 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=".MainActivity" >ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:scaleType="fitStart"
android:src="@drawable/clip_drawable_image"
/>
RelativeLayout>
RelativeLayout 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=".MainActivity" >ImageViewandroid:id="@+id/image"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:scaleType="fitStart"android:src="@drawable/clip_drawable_image"/>RelativeLayout>

代码调用如下:



package com.zejian.drawble;import android.app.Activity;
import android.graphics.drawable.ClipDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ImageView;import java.util.Timer;
import java.util.TimerTask;/**
* Created by zejian
* Time 16/8/19.
* Description:
*/
public class Clip_Activity extends Activity {
private final static int IS_CONTUNUE=0x22;
privateClipDrawable drawable;
privateImageView imageView;
Timer timer = new Timer();final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {if (msg.what == IS_CONTUNUE) {
/**setlevel()设置图片截取的大小
* 修改ClipDrawable的level值,level值为0--10000;
* 10000:截取图片大小为空白,0:截取图片为整张图片;
*/
drawable.setLevel(drawable.getLevel() + 200);
}
}};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_clip);imageView = (ImageView) findViewById(R.id.image);
//获取图片所显示的ClipDrawable对象
drawable = (ClipDrawable) imageView.getDrawable();
//定时器
timer.schedule(new TimerTask() {@Override
public void run() {
Message msg = new Message();
msg.what = IS_CONTUNUE;
handler.sendMessage(msg);
if (drawable.getLevel() >= 10000) {
timer.cancel();
}
}
}, 0, 200);}
}
package com.zejian.drawble;import android.app.Activity;import android.graphics.drawable.ClipDrawable;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.ImageView;import java.util.Timer;import java.util.TimerTask;/** * Created by zejian * Time 16/8/19. * Description: */public class Clip_Activity extends Activity {private final static int IS_CONTUNUE=0x22;privateClipDrawable drawable;privateImageView imageView;Timer timer = new Timer();final Handler handler = new Handler() {@Overridepublic void handleMessage(Message msg) {if (msg.what == IS_CONTUNUE) {/**setlevel()设置图片截取的大小 * 修改ClipDrawable的level值,level值为0--10000; * 10000:截取图片大小为空白,0:截取图片为整张图片; */drawable.setLevel(drawable.getLevel() + 200);}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_clip);imageView = (ImageView) findViewById(R.id.image);//获取图片所显示的ClipDrawable对象drawable = (ClipDrawable) imageView.getDrawable();//定时器timer.schedule(new TimerTask() {@Overridepublic void run() {Message msg = new Message();msg.what = IS_CONTUNUE;handler.sendMessage(msg);if (drawable.getLevel() >= 10000) {timer.cancel();}}}, 0, 200);}}

效果如下:


11、ColorDrawable

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Canvas使用技巧 相关文章

    Canvas使用技巧 相关文章

    2017-02-14 08:00

  • 调用android 自带的DownloadProvider遇到的有关问题

    调用android 自带的DownloadProvider遇到的有关问题

    2017-02-11 09:02

  • 轻松理解Android的SurfaceView控件

    轻松理解Android的SurfaceView控件

    2017-02-09 18:03

  • 【自定义控件系列一】android画图类

    【自定义控件系列一】android画图类

    2017-02-07 13:02

网友点评
a