Canvas的save()和restore()以及clipRect()方法测试

来源:互联网 发布:淘宝小二驳回售后服务 编辑:程序博客网 时间:2024/05/22 10:54

MainActivity如下:

package cn.testcanvas;import android.os.Bundle;import android.widget.ImageView;import android.app.Activity;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;/** * Demo描述: * canvas的save()和restore()以及clipRect()方法测试 *  * Demo总结: * 1 save()和restore()要配对使用(restore可以比save少,但不能多) *   若restore调用次数比save多,会报错 * 2 canvas剪裁后绘制的东西只能在裁剪区域的范围能才能显示出来 *  * 参考资料: * http://blog.csdn.net/lonelyroamer/article/details/8264189 * * */public class MainActivity extends Activity {    private ImageView mImageView;    private ImageView mClipedImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);init();}    private void init(){    mImageView=(ImageView) findViewById(R.id.imageView);    mClipedImageView=(ImageView) findViewById(R.id.clipedImageView);    //分开测试    //testClip();    testSaveAndRestore();    }        private void testClip(){    Bitmap bitmap=Bitmap.createBitmap(200, 200, Config.ARGB_8888);    Canvas canvas=new Canvas(bitmap);    canvas.drawColor(Color.GREEN);    Paint paint=new Paint();    paint.setColor(Color.YELLOW);    canvas.drawText("绿色部分为Canvas剪切前的区域", 20, 50, paint);            Rect rect=new Rect(10,95,180,140);    canvas.clipRect(rect);    canvas.drawColor(Color.YELLOW);    paint.setColor(Color.BLACK);    //canvas剪裁后绘制的东西只能在裁剪区域的范围能才能显示出来    canvas.drawText("黄色部分为Canvas剪切后的区域", 10, 110, paint);    mImageView.setImageBitmap(bitmap);        //显示截取后的Bitmap:    Bitmap newBitmap=Bitmap.createBitmap(bitmap,10,95,170,45);    mClipedImageView.setImageBitmap(newBitmap);    }        private void testSaveAndRestore(){    Bitmap bitmap=Bitmap.createBitmap(200, 200, Config.ARGB_8888);    Canvas canvas=new Canvas(bitmap);    Paint paint=new Paint();    paint.setColor(Color.RED);    paint.setTextSize(25);    canvas.rotate(15);    canvas.drawText("Hello Android 1", 20, 30, paint);    canvas.translate(50, 50);    //注意:save()方法    //保存在此save()方法之前的canvas的操作    //比如:roate(),translate(),clipXXX()    canvas.save();        paint.setColor(Color.GREEN);    paint.setTextSize(15);    canvas.rotate(60);    canvas.translate(-20,-20);    canvas.drawText("Hello Android 2", 20, 60, paint);            //注意:restore()方法将save()方法之    //后Canvas的roate(),translate(),clipXXX()的操作清空      canvas.restore();    paint.setColor(Color.BLACK);    paint.setTextSize(15);    canvas.drawText("Hello Android 3", 20, 70, paint);        mImageView.setImageBitmap(bitmap);    }}



main.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"    >    <TextView        android:id="@+id/textView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="测试Canvas"        android:layout_centerHorizontal="true"    />    <ImageView         android:id="@+id/imageView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/textView"        android:layout_centerInParent="true"     />    <ImageView         android:id="@+id/clipedImageView"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@id/imageView"        android:layout_centerHorizontal="true"        android:layout_marginTop="15dip"     />   </RelativeLayout>

 

原创粉丝点击