Android新控件之MotionLayout 動畫管理布局之ImageFilterView圖片的處理<三>

效果圖.gif

MotionLayout 是一種布局類型耻讽,可幫助您管理應用中的運動和微件動畫税手。MotionLayoutConstraintLayout 的子類识虚,在其豐富的布局功能基礎之上構建而成。作為 ConstraintLayout 庫的一部分辫秧,MotionLayout 可用作支持庫,并可向后兼容 API 級別 14被丧。

ImageFilterView 是constraintlayout 2.0 以后新增加的一個圖片處理的,繼承于AppCompatImageView的ImageView,可以理解為ImageView的擴展子View.ImageFilterView繼承ImageVIew擴展出一些圖像處理的屬性方法,.字面翻譯是 圖像過濾器視圖

屬性方法

<declare-styleable name="ImageFilterView">

        <attr format="reference" name="altSrc"/> //為src圖像提供可選圖像盟戏,以允許交叉衰落

        <attr format="float" name="saturation"/> //設置圖像的飽和度<br>0=灰度绪妹,1=原始,2=超飽和

        <attr format="float" name="brightness"/> //設置圖像的亮度<br>0=黑色柿究,1=原色邮旷,2=亮度的兩倍

        <attr format="float" name="warmth"/> //這將調整圖像的外觀色溫<br>1=中性,2=溫暖蝇摸,5=寒冷

        <attr format="float" name="contrast"/> //這將設置對比度婶肩。1=不變,0=灰色探入,2=高對比度

        <attr format="float" name="crossfade"/> //設置兩個圖像之間的當前混合<br>0=src 1=altSrc圖像

        <attr format="dimension" name="round"/> //圓形圓形

        <attr format="boolean" name="overlay"/>定義alt圖像是在原始圖像的頂部淡入淡入狡孔,還是將淡入淡入我被它迷住了。默認值為true蜂嗽。半透明對象設置為false

        <attr format="float" name="roundPercent"/> 將拐角曲率半徑設置為較小邊的分數(shù)苗膝。對于正方形,1將生成一個圓

        <attr format="float" name="imagePanX"/> //從中心設置平移  pan將平移設置為X植旧,其中0居中

        <attr format="float" name="imagePanY"/>//從中心設置平移  pan將平移設置為Y辱揭,其中0居中

        <attr format="float" name="imageZoom"/> //縮放效果

        <attr format="float" name="imageRotate"/> //旋轉效果

    </declare-styleable>

實現(xiàn)MotionLayout關聯(lián)ImageFilterView 實現(xiàn)圖像 縮放(內容縮放非尺寸縮放),調整飽和度,以及混合切換的效果

1.scene_image_filter.xml 資源代碼

<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto">

    <!-- 配置動畫屬性 -->
    <Transition
        motion:constraintSetEnd="@+id/end"
        motion:constraintSetStart="@+id/start"
        motion:duration="500">
        <!-- 觸摸屬性  onTouchUp   stop  不自動滑動-->
        <OnSwipe
            motion:dragDirection="dragDown"
            motion:touchAnchorId="@+id/image"
            motion:touchAnchorSide="bottom" />
    </Transition>

    <!-- 是定義描述您的運動的各種限制條件的位置 -->
    <!-- 開始的View限制 -->
    <ConstraintSet android:id="@+id/start">
        <!-- 條件限制 -->
        <Constraint
            android:id="@+id/image"
            android:layout_width="320dp"
            android:layout_height="180dp"
            android:layout_marginTop="20dp"
            motion:layout_constraintEnd_toEndOf="parent"
            motion:layout_constraintStart_toStartOf="parent"
            motion:layout_constraintTop_toTopOf="parent">
            <!-- 設置縮放  -->
            <CustomAttribute
                motion:attributeName="ImageZoom"
                motion:customFloatValue="1.0" />
            <!-- 設置兩個圖像之間的當前混合  -->
            <CustomAttribute
                motion:attributeName="Crossfade"
                motion:customFloatValue="0" />
            <!-- 設置飽和度  -->
            <CustomAttribute
                motion:attributeName="Saturation"
                motion:customFloatValue="0" />

        </Constraint>
    </ConstraintSet>

    <!-- 結束的View限制  -->
    <ConstraintSet android:id="@+id/end">
        <Constraint
            android:id="@+id/image"
            android:layout_width="320dp"
            android:layout_height="180dp"
            android:layout_marginBottom="20dp"
            motion:layout_constraintBottom_toBottomOf="parent"
            motion:layout_constraintEnd_toEndOf="parent"
            motion:layout_constraintStart_toStartOf="parent">
            <CustomAttribute
                motion:attributeName="ImageZoom"
                motion:customFloatValue="1.5" />
            <CustomAttribute
                motion:attributeName="Crossfade"
                motion:customFloatValue="1" />
            <CustomAttribute
                motion:attributeName="Saturation"
                motion:customFloatValue="1" />
        </Constraint>
    </ConstraintSet>

</MotionScene>
        

2.activity_mothion_image_filter.xml 資源代碼

<?xml version="1.0" encoding="utf-8"?>
<!-- activity_main.xml -->
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/motionLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layoutDescription="@xml/scene_image_filter">
<!-- 移動的控件 -->
    <androidx.constraintlayout.utils.widget.ImageFilterView
        android:id="@+id/image"
        android:src="@mipmap/roard"
        app:altSrc="@mipmap/hoford"
        android:layout_width="320dp"
        android:layout_height="180dp"
      />

</androidx.constraintlayout.motion.widget.MotionLayout>

3.Activity 代碼

package com.wu.material

import android.annotation.SuppressLint
import android.graphics.Rect
import android.os.Bundle
import android.widget.FrameLayout
import android.widget.RelativeLayout
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.motion.widget.MotionLayout
import com.google.android.material.badge.BadgeDrawable
import com.google.android.material.badge.BadgeUtils


/**
 * @author wkq
 *
 * @date 2021年11月04日 16:40
 *
 *@des  觸摸平移動畫
 *
 */

class MothionImageFilterViewActivity :AppCompatActivity() {

    @SuppressLint("RestrictedApi")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_mothion_image_filter)

        setShowLines()
    }

    /**
     * 設置展示動畫路徑
     */
    private fun setShowLines() {
       var motionLayout= findViewById<MotionLayout>(R.id.motionLayout)
        motionLayout.setDebugMode(MotionLayout.DEBUG_SHOW_PATH)
    }


}

總結

ImageFilterView 一個繼承于ImageView的圖像變化處理的新控件值得你擁有,搭配MotionLayout效果更美好,美滋滋又學了一招.

參考文獻

1.Google的MotionLayout介紹說明

2.MotionLayout的文檔簡介

3.MotionLayout 源碼地址

4.ImageFilterView 源碼地址

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌嫩码,老刑警劉巖鳍寂,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異屋谭,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門听皿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宽档,你說我怎么就攤上這事尉姨。” “怎么了吗冤?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵又厉,是天一觀的道長。 經(jīng)常有香客問我椎瘟,道長覆致,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任肺蔚,我火速辦了婚禮篷朵,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己声旺,他們只是感情好笔链,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著腮猖,像睡著了一般鉴扫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上澈缺,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天坪创,我揣著相機與錄音,去河邊找鬼姐赡。 笑死莱预,一個胖子當著我的面吹牛,可吹牛的內容都是我干的项滑。 我是一名探鬼主播依沮,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼枪狂!你這毒婦竟也來了危喉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤州疾,失蹤者是張志新(化名)和其女友劉穎辜限,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體严蓖,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡薄嫡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了颗胡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片毫深。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖杭措,靈堂內的尸體忽然破棺而出费什,到底是詐尸還是另有隱情钾恢,我是刑警寧澤手素,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站瘩蚪,受9級特大地震影響泉懦,放射性物質發(fā)生泄漏。R本人自食惡果不足惜疹瘦,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一崩哩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦邓嘹、人聲如沸酣栈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矿筝。三九已至,卻和暖如春棚贾,著一層夾襖步出監(jiān)牢的瞬間窖维,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工妙痹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留铸史,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓怯伊,卻偏偏與公主長得像琳轿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子震贵,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內容