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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章