欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 圖片特效如何實(shí)現(xiàn)及總結(jié)

 更新時(shí)間:2016年12月02日 10:59:16   作者:崢嶸life  
這篇文章主要介紹了Android 圖形特效如何實(shí)現(xiàn)及總結(jié)的相關(guān)資料,這里對(duì)Android圖像特效的實(shí)現(xiàn)比如:旋轉(zhuǎn),放大,縮小,傾斜等,需要的朋友可以參考下

Android 圖形特效

             最近公司項(xiàng)目,有一個(gè)需求是做圖片特效的任務(wù),自己寫(xiě)了代碼實(shí)現(xiàn)特效,但是不是很好,上網(wǎng)搜了相關(guān)資料,整理了一下比較全面的Android 圖片特效的資料,大家可以看下,

一.圖形特效(一)特效的實(shí)現(xiàn)方式

在Android中,提供了3種方式實(shí)現(xiàn)特效,setXXX方法,postXXX和preXXX()方法。

1.setXXX方法用于直接設(shè)置Matrix的值,每使用一次setXXX()方法,整個(gè)的Matrix都會(huì)變掉。

2.postXXX方法用于采用后乘的方式為Matrix設(shè)置值,可以連續(xù)多次使用post完成多個(gè)變換

3.preXXX方法用于采用前乘的方式為Matrix設(shè)置值,使用preXXX方法的設(shè)置操作最先發(fā)生.

(二)特效的表現(xiàn)形式

1.旋轉(zhuǎn):setRotate(float dgrees,float px,float py)

px、py為旋轉(zhuǎn)的軸心

2.縮放:setScale(float sx.float sy)

sx和sy用于指定x軸和軸y軸的縮放比例
Android提供了android.graphics.Matrix類的seetScale(),postScale()和preScale()方法可對(duì)圖像進(jìn)行縮放.這三個(gè)方法除了方法名不同外,其它的語(yǔ)法格式均相同

3.傾斜 setSkew (float kx.float ky)

ky和ky用于指定x軸和軸y軸的傾斜量
Android提供了android.graphics.Matrix類的setSkew()(),postSkew ()和preSkew()方法可對(duì)圖像進(jìn)行傾斜.這三個(gè)方法除了方法名不同外,其它的語(yǔ)法格式均相同
setSkew (float sx,float sy,float px,float py)
px 和py是以它們?yōu)檩S心進(jìn)行傾斜

4.平移 setTranslate (float dx.float dy)

dy和dy用于指定移動(dòng)到的位置的x和y的坐標(biāo)
Android提供了android.graphics.Matrix類的setTranslate (),postTranslate ()和 preTranslate ()方法可對(duì)圖像進(jìn)行平移.這三個(gè)方法除了方法名不同外,其它的語(yǔ)法格式均相同

二.BitmapShader渲染圖像

在android中BitmapShader類主要用來(lái)渲染圖像,如果需要將一張圖片裁剪成橢圓或者圓形等 形狀顯示到屏幕上時(shí),就可以使用BitmapShader類來(lái)實(shí)現(xiàn),使用BitmapShader類來(lái)渲染圖像的
基本步驟如下

創(chuàng)建BitmapShader類的對(duì)象, 通過(guò)Paint的setShader()方法來(lái)設(shè)置渲染對(duì)象. 在繪制圖像時(shí),使用已經(jīng)設(shè)置了setShader()方法的畫(huà)筆.

三.下面是一個(gè)圖形特效控制的一個(gè)示例

程序通過(guò)按鍵來(lái)控制圖像的放大縮小、旋轉(zhuǎn)、傾斜。

(一)自定義的View的代碼

package lesson10_fragmentfordata.myapplication;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.View;

/**
 * 圖像特效的演示
 */

public class MyView extends View {


  //定義Bitmap對(duì)象
  Bitmap bitmap;
  //創(chuàng)建矩陣對(duì)象
  Matrix matrix = new Matrix();

  //寬和高
  int width, height;

  //縮放比例
  float scale = 1f;

  //圖像的狀態(tài)是縮放還是旋轉(zhuǎn)
  Boolean isScale = false;
  //判斷是否旋轉(zhuǎn)
  Boolean istRotate = false;

  //x軸方向傾斜的角度
  private float sx;
  //旋轉(zhuǎn)的角度
  private float degress;

  //重寫(xiě)倆個(gè)構(gòu)造方法
  public MyView(Context context) {
    super(context);
    initView();
  }

  public MyView(Context context, AttributeSet attrs) {
    super(context, attrs);
    initView();
  }

  /**
   * 初始化數(shù)據(jù)
   */
  private void initView() {
    //獲取位圖  bitmap=getContext().getResources().getDrawable(R.mipmap.img01);
    bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.a3);
    //獲取寬和高
    width = bitmap.getWidth();
    height = bitmap.getHeight();
    //使當(dāng)前的視圖獲取焦點(diǎn)
    this.setFocusable(true);
  }

  /**
   * 重寫(xiě)onDraw重繪的方法
   */
  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    matrix.reset();//重置
    if (isScale) {
      //伸縮狀態(tài)
      matrix.setScale(scale, scale);
    } else {
      //傾斜狀態(tài)
      matrix.setSkew(sx, 0);
    }

    if (istRotate) {
      //順時(shí)針旋轉(zhuǎn)30度
      matrix.setRotate(degress,0.5f*width,0.5f*height);
    }
    //根據(jù)原始位圖和Matrix創(chuàng)建新圖片
    Bitmap bit = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
    //從新繪制位圖
    canvas.drawBitmap(bit, matrix, null);

  }

  /**
   * 鍵盤(pán)控制的邏輯
   */
  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
      case KeyEvent.KEYCODE_A://點(diǎn)擊A向左傾斜
        isScale = false;
        istRotate=false;
        sx -= 0.1;
        invalidate();//重繪
        break;
      case KeyEvent.KEYCODE_D://點(diǎn)擊D向右傾斜
        isScale = false;
        istRotate=false;
        sx += 0.1;
        invalidate();//重繪
        break;
      case KeyEvent.KEYCODE_W://點(diǎn)擊W圖像變大
        isScale = true;
        istRotate=false;
        scale += 0.1;
        invalidate();//重繪
        break;
      case KeyEvent.KEYCODE_S://點(diǎn)擊S圖像變小
        isScale = true;
        istRotate=false;
        scale -= 0.1;
        invalidate();//重繪
        break;
      case KeyEvent.KEYCODE_X://點(diǎn)擊x圖像順時(shí)針旋轉(zhuǎn)30度
        istRotate = true;
        degress += 30;
        invalidate();//重繪
        break;

    }
    return super.onKeyDown(keyCode, event);
  }
}

(二)調(diào)用類

public class MainActivity extends Activity {


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(new MyView(this));
  }
}

程序通過(guò)W鍵控制放大后的效果:
f1

程序通過(guò)D鍵控制傾斜后的效果:

f2
程序通過(guò)X鍵控制旋轉(zhuǎn)后的效果:
f3

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

最新評(píng)論