Android點選縮圖檢視大圖的縮放動畫
其實點選小圖顯示大圖非常簡單的一種實現方式就是,在佈局中加一個全屏的ImageView,然後隱藏。點選小圖就把圖片設定給大圖,然後大圖顯示。
這個文章裡也是這麼做的,不過這邊課程的重心在於講從縮圖到大圖的動畫過程。動畫的目的是讓過程看起來像是從小的縮圖的邊界開始放大到最終的大圖的。
佈局
在佈局檔案裡設定兩張小的ImageView,和一個全屏的ImageView。還要注意根佈局。
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
tools:context="com.sunlinlin.zoomingview.MainActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView1"
android:layout_width="159dp"
android:layout_height="116dp"
app:srcCompat ="@drawable/xiaomao" />
<ImageView
android:id="@+id/imageView2"
android:layout_width="159dp"
android:layout_height="116dp"
app:srcCompat="@mipmap/ic_launcher"/>
</LinearLayout>
<ImageView
android:id="@+id/expanded_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00000000"
android:scaleType="centerCrop"
android:visibility="invisible" />
</RelativeLayout>
Activity
然後在Activit中進行一些簡單的設定,兩張小圖的點選事件是通過動畫顯示大圖。
public class MainActivity extends AppCompatActivity {
// 持有這個動畫的引用,讓他可以在動畫執行中途取消
private Animator mCurrentAnimator;
private int mShortAnimationDuration;
private View imageView1;
private View imageView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
imageView1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
zoomImageFromThumb(imageView1,R.drawable.xiaomao);
}
});
imageView2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
zoomImageFromThumb(imageView2,R.mipmap.ic_launcher);
}
});
// 系統預設的短動畫執行時間 200
mShortAnimationDuration = getResources().getInteger(
android.R.integer.config_shortAnimTime);
}
private void initView() {
imageView1 = (ImageView) findViewById(R.id.imageView1);
imageView2 = (ImageView) findViewById(R.id.imageView2);
}
}
縮放動畫
都在註釋裡.
private void zoomImageFromThumb(final View thumbView, int imageResId) {
// 如果有動畫正在執行,取消這個動畫
if (mCurrentAnimator != null) {
mCurrentAnimator.cancel();
}
// 載入顯示大圖的ImageView
final ImageView expandedImageView = (ImageView) findViewById(
R.id.expanded_image);
expandedImageView.setImageResource(imageResId);
// 計算初始小圖的邊界位置和最終大圖的邊界位置。
final Rect startBounds = new Rect();
final Rect finalBounds = new Rect();
final Point globalOffset = new Point();
// 小圖的邊界就是小ImageView的邊界,大圖的邊界因為是鋪滿全屏的,所以就是整個佈局的邊界。
// 然後根據偏移量得到正確的座標。
thumbView.getGlobalVisibleRect(startBounds);
findViewById(R.id.container).getGlobalVisibleRect(finalBounds, globalOffset);
startBounds.offset(-globalOffset.x, -globalOffset.y);
finalBounds.offset(-globalOffset.x, -globalOffset.y);
// 計算初始的縮放比例。最終的縮放比例為1。並調整縮放方向,使看著協調。
float startScale=0;
if ((float) finalBounds.width() / finalBounds.height()
> (float) startBounds.width() / startBounds.height()) {
// 橫向縮放
float startWidth = startScale * finalBounds.width();
float deltaWidth = (startWidth - startBounds.width()) / 2;
startBounds.left -= deltaWidth;
startBounds.right += deltaWidth;
} else {
// 豎向縮放
float startHeight = startScale * finalBounds.height();
float deltaHeight = (startHeight - startBounds.height()) / 2;
startBounds.top -= deltaHeight;
startBounds.bottom += deltaHeight;
}
// 隱藏小圖,並顯示大圖
thumbView.setAlpha(0f);
expandedImageView.setVisibility(View.VISIBLE);
// 將大圖的縮放中心點移到左上角。預設是從中心縮放
expandedImageView.setPivotX(0f);
expandedImageView.setPivotY(0f);
//對大圖進行縮放動畫
AnimatorSet set = new AnimatorSet();
set.play(ObjectAnimator.ofFloat(expandedImageView, View.X, startBounds.left, finalBounds.left))
.with(ObjectAnimator.ofFloat(expandedImageView, View.Y, startBounds.top, finalBounds.top))
.with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_X, startScale, 1f))
.with(ObjectAnimator.ofFloat(expandedImageView, View.SCALE_Y, startScale, 1f));
set.setDuration(mShortAnimationDuration);
set.setInterpolator(new DecelerateInterpolator());
set.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mCurrentAnimator = null;
}
@Override
public void onAnimationCancel(Animator animation) {
mCurrentAnimator = null;
}
});
set.start();
mCurrentAnimator = set;
// 點選大圖時,反向縮放大圖,然後隱藏大圖,顯示小圖。
final float startScaleFinal = startScale;
expandedImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mCurrentAnimator != null) {
mCurrentAnimator.cancel();
}
AnimatorSet set = new AnimatorSet();
set.play(ObjectAnimator
.ofFloat(expandedImageView, View.X, startBounds.left))
.with(ObjectAnimator
.ofFloat(expandedImageView,
View.Y,startBounds.top))
.with(ObjectAnimator
.ofFloat(expandedImageView,
View.SCALE_X, startScaleFinal))
.with(ObjectAnimator
.ofFloat(expandedImageView,
View.SCALE_Y, startScaleFinal));
set.setDuration(mShortAnimationDuration);
set.setInterpolator(new DecelerateInterpolator());
set.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
thumbView.setAlpha(1f);
expandedImageView.setVisibility(View.GONE);
mCurrentAnimator = null;
}
@Override
public void onAnimationCancel(Animator animation) {
thumbView.setAlpha(1f);
expandedImageView.setVisibility(View.GONE);
mCurrentAnimator = null;
}
});
set.start();
mCurrentAnimator = set;
}
});
}
相關推薦
Android點選縮圖檢視大圖的縮放動畫
其實點選小圖顯示大圖非常簡單的一種實現方式就是,在佈局中加一個全屏的ImageView,然後隱藏。點選小圖就把圖片設定給大圖,然後大圖顯示。 這個文章裡也是這麼做的,不過這邊課程的重心在於講從縮圖到大圖的動畫過程。動畫的目的是讓過程看起來像是從小的縮圖
android 點選縮圖檢視大圖
android中點選縮圖檢視大圖的方法一般有兩種,一種是想新浪微博list頁面那樣,彈出一個視窗顯示大圖(原activity為背景)。另一種就是直接開啟一個新的activity顯示大圖。 1、第一種方法我們可以使用自定義的Dialog來實現: /** * 點選縮圖開啟
android 擊縮圖檢視大圖
android中點選縮圖檢視大圖的方法一般有兩種,一種是想新浪微博list頁面那樣,彈出一個視窗顯示大圖(原activity為背景)。另一種就是直接開啟一個新的activity顯示大圖。 1、第一種方法我們可以使用自定
html點選小圖檢視大圖
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
點選圖片 彈出大圖
<div class="box-body table-responsive no-padding"> <table class="table table-hover">
bootstrap 點選圖片彈出大圖
效果: 在一個table裡顯示很多的小圖,每點選一個圖片,顯示一張大圖。 小圖的html <td><img height='120px' width='200px' src="
Android開發之--縮圖點選檢視大圖
android中點選縮圖檢視大圖的方法一般有兩種,一種是想新浪微博list頁面那樣,彈出一個視窗顯示大圖(原activity為背景)。另一種就是直接開啟一個新的activity顯示大圖。1、第一種方法我們可以使用自定義的AlertDialog來實現,程式碼如下: ImageView image=(Imag
Android點選檢視大圖過渡動畫與圖片縮放與移動
從一個activity到另一個activity的過渡 1.小圖點選事件程式碼 @Override public void onClick(View view) { switch (view.getId()) { case R.id.img_1:
Android WebView 圖片超出寬度自適應,點選檢視大圖
webView 配置 WebSettings webSettings = webView.getSettings(); webSettings.setJava
微信JSSDK上傳預覽多圖,ios/Android。點選檢視大圖,支援滑動。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=dev
Android 實現WebView點選圖片檢視大圖列表及圖片儲存
在日常開發過程中,有時候會遇到需要在app中嵌入網頁,此時使用WebView實現效果,但在預設情況下是無法點選圖片檢視大圖的,更無法儲存圖片。本文將就這一系列問題的實現進行說明。 圖示: 專案的知識點: 載入網頁後如何捕捉網頁中的圖片點選事件; 獲取點選
android webview載入html圖片自適應手機螢幕大小&點選檢視大圖
我們在開發中,顯示資訊詳情時,一般後臺會給出html文字,在Android端一般採用webview控制元件來展示,但是後臺給出的html文字一般是給電腦端用的,沒有自適配手機,導致手機端圖片顯示過大,需要左右移動來檢視全圖。下面給出幾種實用方法,達到在手機端用webvi
js 移動端漂亮input框上傳本地,顯示縮圖,點選可以檢視大圖
//首先根據id得到input框的檔案,判斷大小,如果大於100M就不給上傳,如果不大於就可以上傳 $("input[type='file']").on("change",function(){ var load =$(this).attr("id"); var fileSize
jquery特效---jquery顯示縮圖,點選檢視大圖,並且大圖可自適應原圖大小
之前為了實現這樣的效果找了很久,大部分都不是自己想要的。 實現這樣的效果,我用了兩個jquery的框架。一個是 jquery.nailthumb.1.1.js,另一個是jquery.colorbox-min.js。
Android 點選ImageView 檢視大圖
彈出dialog 即可: private void seeBigImg() {// TODO Auto-generated method stubimageView.setOnClickListener(new OnClickListener() { // 點選放大publ
Android點選縮圖,放大至全圖
最近做一個專案類似於QQ空間,做到照片瀏覽的功能,對於QQ空間中點選圖片放大至全屏,感覺效果很贊,於是也做了個類似的效果。如下。 我不知道QQ那個是怎麼做的,我的思路如下: 首先,從圖片縮略介面跳轉到圖片詳情頁面,應該是從一個Activity跳轉到另外一個Activ
點選檢視大圖滑動預覽(h5,pc通用)
點選預覽大圖並滑動觀看,支援手機端和pc端,具體功能如下圖: 一. touchTouch 的js和css 以及jquery依賴庫 <link rel="stylesheet" type="text/css" href="touchTouch/touchTouch
ionic2 點選檢視大圖 再次點選關閉
import { Injectable } from '@angular/core'; import { Component } from '@angular/core'; import { App, ViewController, NavOptions, NavParams, Action
PC端——點選檢視大圖
1、html佈局: <a href="{{ d.img_url }}" data-lightbox="roadtrip" data-field="img_url" class="lightbox_style doctor_image"> <
mui- 給圖片新增點選檢視大圖功能
<html> <head> <meta charset="utf-8"> <title>圖片放大</title> <meta name="viewport" content="width=device-width,