国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android控件雙指縮放及雙指拖動

這篇具有很好參考價值的文章主要介紹了Android控件雙指縮放及雙指拖動。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文章分為兩部分,第一部分先講解下需要用到的知識點,第二部分提供代碼實例。

相關(guān)知識

MotionEvent中的動作符

  • ACTION_DOWN:單指按下動作(僅在第一根手指按下時有效)
  • ACTION_POINTER_DOWN:雙指及多指按下動作(僅在第二根手指或者大于第二根手指按下時有效)
  • ACTION_POINTER_UP:雙指及多汁抬起動作(僅在第二根手指或者大于第二根的手指抬起時有效)
  • ACTION_UP:單指抬起動作(僅在第一根手指抬起時有效)
  • ACTION_MOVE:手指移動動作(不限手指個數(shù))
  • ACTION_SCROLL:view上下或者左右滑動動作

縮放及位移方法

  • setTranslationX:控件沿x軸的位移,負(fù)數(shù)左移,正數(shù)右移
  • setTranslationY:控件沿y軸的位移,負(fù)數(shù)上移,正數(shù)下移
  • setScaleX:控件沿x軸縮放比
  • setScaleY:控件沿y軸縮放比

代碼示例

package com.example.myapplication;

import static android.content.ContentValues.TAG;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
    private static final String TAG = "xiong_tag";
    private float oldDistance;//剛按下時雙指之間的距離
    private float newDistance;//在屏幕上滑動后雙指之間的距離
    private float scalePoint;//縮放中心點
    private float scale = 1f;//縮放比
    private float translationX;//x軸移動量
    private float translationY;//y軸位移量
    private float oldCenterX;//剛按下時雙指之間的點的x坐標(biāo)
    private float oldCenterY;//剛按下時雙指之間的點的y坐標(biāo)
    private float newCenterX;//在屏幕上滑動后雙指之間的點的x坐標(biāo)
    private float newCenterY;//在屏幕上滑動后雙指之間的點的y坐標(biāo)
    private ImageView imageView;//縮放控件,可以是別的控件,如果是surfaceView那么要注意如果Android版本低于或者等于6,那么是不支持用這個方法進(jìn)行縮放的

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = findViewById(R.id.imageview);
        imageView.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_POINTER_DOWN:
                Log.d(TAG, "onTouch: pointer down");
                if(event.getPointerCount() == 2) {//getPointerCount返回的是手指的數(shù)量
                    oldDistance = calculateDistance(event);//計算距離
                    oldCenterX = calculateCenter(event, true);//計算兩指之間的中心點的x坐標(biāo)
                    oldCenterY = calculateCenter(event, false);//計算兩指之間的中心點的y坐標(biāo)
                }
                break;
            case MotionEvent.ACTION_MOVE:
                Log.d(TAG, "onTouch: move");
                if (event.getPointerCount() == 2) {
                    newDistance = calculateDistance(event);
                    scale += (newDistance - oldDistance) / oldDistance;
                    newCenterX = calculateCenter(event, true);
                    newCenterY = calculateCenter(event, false);
                    //縮放
                    imageView.setScaleX(scale);
                    imageView.setScaleY(scale);
                    //位移
                    translationX += newCenterX - oldCenterX;
                    translationY += newCenterY - oldCenterY;
                    imageView.setTranslationX(translationX);
                    imageView.setTranslationY(translationY);
                }
                break;
        }
        return true;
    }

    private float calculateDistance(MotionEvent motionEvent) {
        float x1 = motionEvent.getX(0);//第一個點x坐標(biāo)
        float x2 = motionEvent.getX(1);//第二個點x坐標(biāo)
        float y1 = motionEvent.getY(0);//第一個點y坐標(biāo)
        float y2 = motionEvent.getY(1);//第二個點y坐標(biāo)
        return (float) Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
    }
    /*
    *@param isX 是否是x坐標(biāo)
     */
    private float calculateCenter(MotionEvent motionEvent, boolean isX) {
        return isX ? (motionEvent.getX(1) + motionEvent.getX(0)) / 2 : (motionEvent.getY(1) + motionEvent.getY(0)) / 2;
    }
}

以上就是全部內(nèi)容了,謝謝觀看。文章來源地址http://www.zghlxwxcb.cn/news/detail-623551.html

到了這里,關(guān)于Android控件雙指縮放及雙指拖動的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Android 點擊圖片,放大查看,實現(xiàn)縮放拖動等功能

    實現(xiàn)方法:點擊圖片時,把圖片url傳到另一個activity中實現(xiàn)放大拖動, 圖片點擊事件觸發(fā): Intent intent = new Intent(); intent.setClass(mContext, PictureActivity.class); intent.putExtra(“url”,R.drawable.ic_logo); mContext.startActivity(intent); 然后創(chuàng)建一個activity的內(nèi)容如下: public class PictureActivity extend

    2024年02月11日
    瀏覽(23)
  • android:RecyclerView交互動畫(上下拖動,左右滑動刪除)

    android:RecyclerView交互動畫(上下拖動,左右滑動刪除)

    @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { //監(jiān)聽側(cè)滑;1.刪除數(shù)據(jù),2.調(diào)用adapter.notifyItemRemoved(position) mMoveCallback.onItemRemove(viewHolder.getAdapterPosition()); } //改變選中的Item @Override public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { //判斷狀態(tài) if

    2024年04月12日
    瀏覽(88)
  • Android Studio實現(xiàn)滑動圖片驗證碼

    Android Studio實現(xiàn)滑動圖片驗證碼

    源代碼鏈接 效果: MainActivity SlideImageView activity_main.xml

    2024年02月13日
    瀏覽(29)
  • Android Studio(控件常用屬性)

    通用屬性 屬性 描述 android:id 用于為視圖指定唯一的標(biāo)識符。 android:layout_width 用于指定視圖的寬度。 android:layout_height 用于指定視圖的高度。 android:layout_margin 用于指定視圖周圍的空白區(qū)域。 android:layout_padding 用于指定視圖內(nèi)部的填充區(qū)域。 android:background 用于設(shè)置視圖的背景

    2024年02月05日
    瀏覽(29)
  • Android開發(fā)——控件EditText, 2.獲取EditText輸入的數(shù)據(jù),通過按鈕點擊實現(xiàn),ImageView控件,縮放類型,控件ProgressBar,常用屬性詳解,進(jìn)度條設(shè)置

    Android開發(fā)——控件EditText, 2.獲取EditText輸入的數(shù)據(jù),通過按鈕點擊實現(xiàn),ImageView控件,縮放類型,控件ProgressBar,常用屬性詳解,進(jìn)度條設(shè)置

    1.?android?:?hint 輸入提示 2.?android?:?textColorHint ?輸入提示文字的顏色 3.?android?:?inputType ?輸入類型 4.?android?:?drawableXxxx 在輸入框的指定方位添加圖片 5.?android?:?drawablePadding ?設(shè)置圖片與輸入內(nèi)容的間距 6.?android?:?paddingxxxx ?設(shè)置內(nèi)容與邊框的間距 7.?android?:?backgrou

    2024年02月07日
    瀏覽(24)
  • Android應(yīng)用-Flutter實現(xiàn)絲滑的滑動刪除、移動排序等-Dismissible控件詳解

    Android應(yīng)用-Flutter實現(xiàn)絲滑的滑動刪除、移動排序等-Dismissible控件詳解

    Dismissible 是 Flutter 中用于實現(xiàn)可滑動刪除或拖拽操作的一個有用的小部件。主要用于在用戶對列表項或任何其他可滑動的元素執(zhí)行刪除或拖動操作時,提供一種簡便的實現(xiàn)方式。 列表項刪除: 允許用戶在列表中通過滑動手勢刪除某個項。 左右滑動: 提供可自定義的背景,當(dāng)

    2024年02月04日
    瀏覽(23)
  • Android Studio中的一些常見控件

    在這個例子中,我們使用了android:text屬性來設(shè)置TextView要顯示的文本。您可以使用其他屬性來更改文本顏色,字體,大小等。 當(dāng)使用TextView控件時,您需要在Java代碼中引用該控件,以便對其進(jìn)行操作。以下是一些與TextView控件相關(guān)的Java代碼示例: 這將引用具有R.id.textView標(biāo)識

    2023年04月14日
    瀏覽(26)
  • [Android studio] 第6節(jié) Button控件

    目錄 一、Button是什么? 二、使用步驟 1.demo Button控件具有許多屬性可以用來自定義其外觀和行為。以下是Button控件常用的參數(shù)屬性及其詳解: android:id :設(shè)置Button的唯一標(biāo)識符。在代碼中可以使用這個ID引用Button。 android:layout_width :指定Button的寬度,可以使用以下值: \\\"wra

    2024年02月08日
    瀏覽(26)
  • Android Studio 學(xué)習(xí)記錄-按鈕控件(Button)

    Android Studio 學(xué)習(xí)記錄-按鈕控件(Button)

    目錄 按鈕控件(Button) ????????textAllCaps屬性 ????????onClick屬性 點擊事件和長按事件 禁用與恢復(fù)按鈕 ????????本文介紹按鍵控件的常見用法,包括:如何設(shè)置大小寫屬性,如何響應(yīng)按鈕的點擊事件和長按事件,如何禁用按鈕又該如何啟用按鈕,等等。 ? ? ? ?

    2023年04月22日
    瀏覽(23)
  • Flutter 雙指縮放和雙指移動共存手勢檢測系列之--1方案

    Flutter 雙指縮放和雙指移動共存手勢檢測系列之--1方案

    本文所采用Flutter 版本為 3.10.6, 也許后續(xù)版本官方會對手勢做進(jìn)一步豐富完善,以解決本文涉及到的解決方案。 本文涉及項目手勢需求 :雙指向外或內(nèi)觸屏伸縮,對圖片進(jìn)行縮放;雙指在屏幕上同向觸屏移動,移動圖片。 Flutter 使用中采用 GestureDetector 進(jìn)行移動或是手勢判

    2024年02月02日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包