91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GestureDetector、手勢、左右滑動控制圖片大小

發布時間:2020-06-09 23:53:15 來源:網絡 閱讀:765 作者:清甘茶 欄目:移動開發

    GestureDetector手勢,這個應用很廣泛,也可以衍生初很多知識點,我從基礎開始寫起,原來一直想學一些高含量的技術,后來發現很多基礎知識點都沒完全理解,每當遇到不明白的小知識點的時候還要上網查,用過一次兩次還記不住,好高騖遠,踏踏實實把每個知識點的所有角角落落的零碎知識整理一下,基礎扎實才會飛的更高;

    下面把GestureDetector的生命周期代碼運行一邊,看具體代碼:

public class MainActivity extends Activity implements OnGestureListener {


private GestureDetector gesture ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

gesture = new GestureDetector(this) ;

}

@Override

public boolean onTouchEvent(MotionEvent event) {

return gesture.onTouchEvent(event) ;

}

@Override

public boolean onDown(MotionEvent arg0) {

System.out.println("******===>onDowm");

return false;

}

@Override

public boolean onFling(MotionEvent event1, MotionEvent event2, float x,

float y) {

System.out.println("******===>onFling");

return false;

}

@Override

public void onLongPress(MotionEvent arg0) {

System.out.println("******===>onLongPress");

}

@Override

public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,

float arg3) {

System.out.println("******===>onScroll");

return false;

}

@Override

public void onShowPress(MotionEvent arg0) {

System.out.println("******===>onShowPress");

}

@Override

public boolean onSingleTapUp(MotionEvent arg0) {

System.out.println("******===>onSingleTapUp");

return false;

}

}

    運行之后經過測試可以發現:當用戶按下的時候會首先執行onDown方法,onSingleTapUp是點擊一下之后馬上抬起按鈕所觸動的方法,onShowPress是點擊之后所執行的方法(點擊之后手機不挪動);onLongPress是點擊之后過段時間所執行的方法,是在手指不拖動的前提之下,如果手指不挪動,執行順序是:onDown--》onShowPrsss--》onLongPress。onScorll是手指滾動的時候所觸發的方法,onFling是拖過多觸發的方法,其中的參數就是拖過的x個y的值得變化,手機點擊屏幕之后從屏幕的開始拖出屏幕所觸發的方法順序是:onDown--》onScorll--》onFling

    下面寫一個關于手勢左右滑動動態控制圖片大小的demo,直接上代碼,有詳細注釋    

public class MainActivity extends Activity implements OnGestureListener {


private GestureDetector gesture;

private ImageView p_w_picpath;

private int width, height;// 寬和高

private Bitmap bitmap;// 初始化圖片資源

private Matrix matrix;

private float currentScale = 1;//記錄縮放比例


@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

p_w_picpath = (ImageView) findViewById(R.id.p_w_picpath);

gesture = new GestureDetector(this);

matrix = new Matrix();

bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.one);

width = bitmap.getWidth() ;

height = bitmap.getHeight() ;

// p_w_picpath.setImageBitmap(bitmap);

p_w_picpath.setImageBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.one));

}


@Override

public boolean onTouchEvent(MotionEvent event) {

// 把觸摸時間交給GestureDetector

return gesture.onTouchEvent(event);

}


@Override

public boolean onDown(MotionEvent arg0) {

return false;

}


@Override

public boolean onFling(MotionEvent event1, MotionEvent event2, float x,

float y) {

//判斷橫向的挪動速度

x = x > 4000 ? 4000 : x;

x = x < -4000 ? -4000 : x;

currentScale += currentScale * x / 4000.0f;

// 保證currentScale不會等于0

currentScale = currentScale > 0.01 ? currentScale : 0.01f;

matrix.reset(); //重置matrix

//縮放matrix

matrix.setScale(currentScale, currentScale, 160, 200);

BitmapDrawable tmp = (BitmapDrawable) p_w_picpath.getDrawable() ;

//如果還沒回收則強制回收

if(!tmp.getBitmap().isRecycled()){

tmp.getBitmap().recycle() ; 

}

//根據原始位圖和matrix進行創建新圖片

Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true) ;

p_w_picpath.setImageBitmap(bitmap2); 

return true ;

}


@Override

public void onLongPress(MotionEvent arg0) {

}


@Override

public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2,

float arg3) {

return false;

}


@Override

public void onShowPress(MotionEvent arg0) {

}


@Override

public boolean onSingleTapUp(MotionEvent arg0) {

return false;

}

}

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" >


   <ImageView

       android:id="@+id/p_w_picpath"

       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:layout_centerInParent="true" />


</RelativeLayout>


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

田林县| 柳河县| 安西县| 广丰县| 景东| 石屏县| 张家界市| 济宁市| 灵川县| 通榆县| 枣强县| 崇州市| 阿荣旗| 开阳县| 通化县| 桓台县| 葵青区| 二连浩特市| 永平县| 屯留县| 鹰潭市| 丹棱县| 岐山县| 城固县| 绩溪县| 金沙县| 惠州市| 莱芜市| 高要市| 昭平县| 永德县| 策勒县| 雷波县| 尼木县| 呼伦贝尔市| 新昌县| 繁昌县| 宜川县| 龙江县| 乐安县| 嘉鱼县|