Android基础学习笔记-图片旋转、平移,翻转的实现

Android使用Canvas、Paint、Matrix简单实现图片的旋转、平移,翻转
  • 准备一张mypicture.jpg图片放置drawable目录
  • 界面截图
    这里写图片描述
  • 示例代码
public class MainActivity extends Activity {
    private ImageView iv;
    private int dx_left = 0;
    private int degrees = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.iv);
    }

    /*
    * 放大按钮的点击事件*/
    public void bt_makeBig(View view) {
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.mypicture);
        Matrix matrix = new Matrix();  //变化的矩阵
        matrix.setScale(2f,2f);  //缩放,平移等方法
        //新建一张白纸,设置参数
        Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth()*2,
                bitmap.getHeight()*2,bitmap.getConfig());
        //将白纸放在画板里
        Canvas canvas = new Canvas(newBitmap);
        //使用画笔
        Paint paint = new Paint();
        paint.setColor(Color.BLUE);  //画笔颜色
        canvas.drawBitmap(bitmap,matrix,paint); //开始画:参数:原图,变换的矩阵,画笔
        iv.setImageBitmap(newBitmap);


    }
    /*
    * 缩小按钮的点击事件*/
    public void bt_makeSmall(View view) {
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.mypicture);
        Matrix matrix = new Matrix();
        matrix.setScale(0.5f, 0.5f);  //缩放倍数
        Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth()/2,
                bitmap.getHeight()/2, bitmap.getConfig());  //画布参数
        Canvas canvas = new Canvas(newBitmap);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        canvas.drawBitmap(bitmap, matrix, paint);
        iv.setImageBitmap(newBitmap);
    }
    /*
    * 左移按钮的实现*/
    public void bt_turnLeft(View view){
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.mypicture);  //从资源文件夹里获取图片
        Matrix matrix = new Matrix();
        matrix.setTranslate(dx_left--,0);  //要实现上下移动改变参数y
        //新建画布
        Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());
        //新建画板,并将新画布放入
        Canvas canvas = new Canvas(newBitmap);
        //新建画笔,并设置画笔颜色
        Paint paint = new Paint();
        paint.setColor(Color.BLUE);
        //在画板上开始画,将要画的图、使用的变化矩阵,画笔传入
        canvas.drawBitmap(bitmap,matrix,paint);
        //将画好的图显示出来
        iv.setImageBitmap(newBitmap);
    }
    /*
    * 逆时针方向转按钮的实现*/
    public void bt_spin(View view){
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.mypicture);  //从资源文件夹里获取图片
        Matrix matrix = new Matrix();
        //转动的方法,传入度数--,实现逆时针转、原图的宽高
        matrix.setRotate(degrees--,bitmap.getWidth(),bitmap.getHeight());
        matrix.postTranslate(100, 100);   //postTranslate不覆盖原先变换,平移一下改变转动中心

        Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth()*2, bitmap.getHeight()*2, bitmap.getConfig());

        Canvas canvas = new Canvas(newBitmap);
        Paint paint = new Paint();
        canvas.drawColor(Color.WHITE);
        paint.setColor(Color.WHITE);
        paint.setAntiAlias(true);//锯齿消除
        canvas.drawBitmap(bitmap, matrix, paint);
        iv.setImageBitmap(newBitmap);

    }

    /*
    * 倒置图片的实现*/
    public void bt_upsideDown(View view){
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.mypicture);  //从资源文件夹里获取图片
        Matrix matrix = new Matrix();
        //倒置就是将原图的y轴由正变负
        matrix.setScale(1,-1);
        //倒置之后再将其向上平移至原来的位置
        matrix.postTranslate(0,bitmap.getHeight());
        //新建画布,画笔,画板
        Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());
        Canvas canvas = new Canvas(newBitmap);
        canvas.drawColor(Color.WHITE);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        canvas.drawBitmap(bitmap,matrix,paint);
        iv.setImageBitmap(newBitmap);
    }
    /*
    * 翻转图片的实现*/
    public void bt_overturn(View view){
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.mypicture);  //从资源文件夹里获取图片
        Matrix matrix = new Matrix();
        //翻转就是将原图的x轴由正变负
        matrix.setScale(-1,1);
        //翻转之后再将其x轴方向移回来
        matrix.postTranslate(bitmap.getWidth(),0);
        //新建画布,画笔,画板
        Bitmap newBitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(),bitmap.getConfig());
        Canvas canvas = new Canvas(newBitmap);
        canvas.drawColor(Color.WHITE);
        Paint paint = new Paint();
        paint.setColor(Color.BLACK);
        canvas.drawBitmap(bitmap,matrix,paint);
        iv.setImageBitmap(newBitmap);
    }
}
  • 布局文件
<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" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="放大"
            android:onClick="bt_makeBig"/>

        <Button
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="缩小"
            android:onClick="bt_makeSmall"/>
        <Button
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="左移"
            android:onClick="bt_turnLeft"/>
        <Button
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="左转"
            android:onClick="bt_spin"/>
        <Button
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="倒置"
            android:onClick="bt_upsideDown"/>
        <Button
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="翻转"
            android:onClick="bt_overturn"/>
    </LinearLayout>

    <ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/mypicture" />

    <ImageView
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/mypicture" />


</RelativeLayout>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值