国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 圖片特效如何實現及總結

2019-12-12 04:27:08
字體:
來源:轉載
供稿:網友

Android 圖形特效

             最近公司項目,有一個需求是做圖片特效的任務,自己寫了代碼實現特效,但是不是很好,上網搜了相關資料,整理了一下比較全面的Android 圖片特效的資料,大家可以看下,

一.圖形特效(一)特效的實現方式

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

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

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

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

(二)特效的表現形式

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

px、py為旋轉的軸心

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

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

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

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

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

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

二.BitmapShader渲染圖像

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

創建BitmapShader類的對象, 通過Paint的setShader()方法來設置渲染對象. 在繪制圖像時,使用已經設置了setShader()方法的畫筆.

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

程序通過按鍵來控制圖像的放大縮小、旋轉、傾斜。

(一)自定義的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對象  Bitmap bitmap;  //創建矩陣對象  Matrix matrix = new Matrix();  //寬和高  int width, height;  //縮放比例  float scale = 1f;  //圖像的狀態是縮放還是旋轉  Boolean isScale = false;  //判斷是否旋轉  Boolean istRotate = false;  //x軸方向傾斜的角度  private float sx;  //旋轉的角度  private float degress;  //重寫倆個構造方法  public MyView(Context context) {    super(context);    initView();  }  public MyView(Context context, AttributeSet attrs) {    super(context, attrs);    initView();  }  /**   * 初始化數據   */  private void initView() {    //獲取位圖  bitmap=getContext().getResources().getDrawable(R.mipmap.img01);    bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.a3);    //獲取寬和高    width = bitmap.getWidth();    height = bitmap.getHeight();    //使當前的視圖獲取焦點    this.setFocusable(true);  }  /**   * 重寫onDraw重繪的方法   */  @Override  protected void onDraw(Canvas canvas) {    super.onDraw(canvas);    matrix.reset();//重置    if (isScale) {      //伸縮狀態      matrix.setScale(scale, scale);    } else {      //傾斜狀態      matrix.setSkew(sx, 0);    }    if (istRotate) {      //順時針旋轉30度      matrix.setRotate(degress,0.5f*width,0.5f*height);    }    //根據原始位圖和Matrix創建新圖片    Bitmap bit = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);    //從新繪制位圖    canvas.drawBitmap(bit, matrix, null);  }  /**   * 鍵盤控制的邏輯   */  @Override  public boolean onKeyDown(int keyCode, KeyEvent event) {    switch (keyCode) {      case KeyEvent.KEYCODE_A://點擊A向左傾斜        isScale = false;        istRotate=false;        sx -= 0.1;        invalidate();//重繪        break;      case KeyEvent.KEYCODE_D://點擊D向右傾斜        isScale = false;        istRotate=false;        sx += 0.1;        invalidate();//重繪        break;      case KeyEvent.KEYCODE_W://點擊W圖像變大        isScale = true;        istRotate=false;        scale += 0.1;        invalidate();//重繪        break;      case KeyEvent.KEYCODE_S://點擊S圖像變小        isScale = true;        istRotate=false;        scale -= 0.1;        invalidate();//重繪        break;      case KeyEvent.KEYCODE_X://點擊x圖像順時針旋轉30度        istRotate = true;        degress += 30;        invalidate();//重繪        break;    }    return super.onKeyDown(keyCode, event);  }}

(二)調用類

public class MainActivity extends Activity {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(new MyView(this));  }}

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

程序通過D鍵控制傾斜后的效果:

f2
程序通過X鍵控制旋轉后的效果:
f3

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 喀喇沁旗| 康乐县| 板桥市| 岳阳县| 淅川县| 广昌县| 庆云县| 阿拉善右旗| 无极县| 和静县| 大庆市| 阜新市| 衡山县| 黄龙县| 阿勒泰市| 固始县| 江津市| 铜川市| 波密县| 英吉沙县| 阜南县| 太康县| 红安县| 东乡县| 沙河市| 大洼县| 盖州市| 铁岭县| 古交市| 广饶县| 丹巴县| 冕宁县| 伊通| 开原市| 旬阳县| 高州市| 玉环县| 时尚| 喀喇沁旗| 青铜峡市| 阿合奇县|