1. 程式人生 > >andorid---通過Viewpager實現圖片滑動以及縮放

andorid---通過Viewpager實現圖片滑動以及縮放

 原創---

    本來通過重寫gallary和imageview來實現圖片滑動以及縮放,但是gallary存在一個問題,就是圖片之間好像在邊緣的地方出現了重疊,而且圖片縮放的時候,在大於邊界的情況出現了很複雜的邏輯,一時也沒搞懂,所以改用ViewPager來實現.方便又快捷。至於自定義的gallary出現了什麼問題暫時也沒時間去搞清楚,就先放一邊把。
ViewPager---首先引入一個別人寫好的庫(library.jar),本想新增到日誌的附件裡面,坑爹騰訊,還要黃鑽。

Image.java
package com.example.test;            //
包名自己改

import android.graphics.Bitmap;

import android.graphics.drawable.Drawable;

public class Image {

         privateString path;

         privateBitmap bitmap;

         privateDrawable drawable;

         publicString getPath() {

                   returnpath;

         }

         publicvoid setPath(String path) {

                   this.path= path;

         }

         publicBitmap getBitmap() {

                   returnbitmap;

         }

         publicvoid setBitmap(Bitmap bitmap) {

                   this.bitmap= bitmap;

         }

         publicDrawable getDrawable() {

                   returndrawable;

         }

         publicvoid setDrawable(Drawable drawable) {

                   this.drawable= drawable;

         }

}




MyPhotoView.java

package com.example.test;

import android.content.Context;

import android.graphics.Bitmap;

import uk.co.senab.photoview.PhotoView;      //從引入的庫裡面呼叫

public class MyPhotoView extends PhotoView{

         publicMyPhotoView(Context context) {

                   super(context);

         }

         /**

    *

    * @param bitmap

    */

   public void setImage(Bitmap bitmap) {        //mAttacher也是庫裡面的東西,沒引入的話會報錯

       super.setImageBitmap(bitmap);

       if (null != mAttacher) {

           mAttacher.update();

       }

    }

}

MyViewPager.java

package com.example.test;

import android.content.Context;

import android.support.v4.view.ViewPager;

import android.util.AttributeSet;

import android.view.MotionEvent;

public class MyViewPager extends ViewPager{

         publicMyViewPager(Context context) {

                   super(context);

                   //TODO Auto-generated constructor stub

         }

         publicMyViewPager(Context context, AttributeSet attrs) {

       super(context, attrs);

    }

         @Override

         publicboolean onInterceptTouchEvent(MotionEvent ev) {

                   try{

                            returnsuper.onInterceptTouchEvent(ev);

                   }catch (IllegalArgumentException e) {

                            e.printStackTrace();

                            returnfalse;

                   }

         }

}

重寫的東西很少很簡單,只需要放進去就行了,使用的話要在Activity裡面下功夫,給出的例子只是將圖片寫死了,固定那幾張圖片。如果要動態的從伺服器下載的話,就需要在裡面新增很多的邏輯,並怎麼好弄,不過有例子後面的問題就好解決了,根據自己的需要去改就行了。

MainActivity.java

package com.example.test;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.graphics.Bitmap;

importandroid.graphics.drawable.BitmapDrawable;

import android.os.Bundle;

importandroid.support.v4.view.PagerAdapter;

import android.view.View;

import android.view.ViewGroup;

import android.view.ViewGroup.LayoutParams;

public class MainActivity extends Activity{

         privateMyViewPager pager;

         privateList<Image> images;

         privateImageAdapter adapter;

         privatestatic int[] sDrawables = {R.drawable.t1, R.drawable.t2, R.drawable.t3,

                   R.drawable.t4};          //寫死了的圖片資源,自己引入,或者動態從伺服器或者網上下載。

         @Override

         protectedvoid onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.fragment_main);                            //佈局檔案只需要放入一個MyViewPager就行了,自己在.java裡面已經重寫了

                   pager= (MyViewPager) findViewById(R.id.my_pager);

                   images= new ArrayList<Image>();               //Image也是重寫的型別

                   init();

                   pager.setAdapter(newImageAdapter(images));

         }

         privatevoid init(){                   //圖片初始化

                   for(inti = 0; i < sDrawables.length; i++){

                            BitmapDrawablebd = (BitmapDrawable) getResources().getDrawable(sDrawables[i]);

                            Bitmapbm = bd.getBitmap();

                            Imageimage = new Image();

                            image.setBitmap(bm);

                            images.add(image);

                   }

         }

         publicclass ImageAdapter extends PagerAdapter{                    //為圖片設定介面卡

                   privateList<Image> list;

                   publicImageAdapter(List<Image> list){

                            this.list= list;

                   }

                   @Override

                   publicView instantiateItem(ViewGroup container, int position) {

                            Imageimage = list.get(position);              //動態下載的話,我選擇的是BitMap陣列,不習慣用List

                            MyPhotoViewphotoView = null;

                            if(null!= image){

                                     photoView= new MyPhotoView(container.getContext());

                                     photoView.setImage(image.getBitmap());

                            }

                            container.addView(photoView,LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

                            returnphotoView;

                   }

                   @Override

                   publicvoid destroyItem(ViewGroup container, int position, Object object) {

                            container.removeView((View)object);

                   }

                   @Override

                   publicboolean isViewFromObject(View view, Object object) {

                            returnview == object;

                   }

                   @Override

                   publicint getCount() {

                            returnimages.size();                     //返回圖片總數

                   }

         }

}

記住在自己的工程裡面引入Library庫,否則活報錯。

備註:圖片瀏覽配一個顯示圖片的張數和圖片總數會顯得更加人性化,只需要在Layout裡面新增一個textview然後MyViewPager新增OnPageChangeListener,就可以動態去改變textview 希望對學習有幫助,並方便以後使用。

                                                                                                                                                                                             7月30號, 

相關推薦

andorid---通過Viewpager實現圖片滑動以及

 原創---    本來通過重寫gallary和imageview來實現圖片滑動以及縮放,但是gallary存在一個問題,就是圖片之間好像在邊緣的地方出現了重疊,而且圖片縮放的時候,在大於邊界的情況出

ZK整合jqueryui 實現圖片滑鼠滾輪以及拖拽位置

//@off image是一個zul中 的image元件 image.setWidgetOverride("bind_", "function(){\r\n"+ "this.$supers('bind_', arguments);\r\n

viewpager實現自動滑動以及手勢滑動功能

今天在做專案的時候,有一個viewpgaer展示圖片的頁面,第一反應是去網上查詢,後來看了好多文章,其實也就是那麼兩三篇文章,其他的都是轉載來轉載去的,主要就是運用執行緒來進行無限迴圈進行實現的操作,個人感覺並不需要運用到執行緒,尤其是你寫了死迴圈後,執行緒的回

使用計時器實現圖片的準確

gree tin 實現 idt 放大 height tint onload ati <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

iOS Swift 實現圖片點擊回彈動畫

obj mean awake art 簡單 onf 點擊縮放 fork sde 效果就是下面這個樣子: 思路借鑒的是MZTimerLabel,有想過做一個自定義的ImageView,但那樣的話之前view用必須要改代碼,索性就按照MZTimerLabel這個方式實現,簡

20.QT-Qpixmap實現圖片鼠標,鼠標拖動示例(詳解)

下滑 resize pix slot https qpi map += als #include "widget.h" Widget::Widget(): BigButton("放大",this), LittleButton("縮小",this),

vue中實現圖片全屏預覽,支援移動端

# 安裝 npm install vue-photo-preview --save   # 引入 import preview from 'vue-photo-preview' import 'vue-photo-preview/dist/skin.css' Vue.use(pr

Fresco使用PhotoDraweeView 實現圖片的手勢

1.gradle引入Fresco   compile 'com.facebook.fresco:fresco:0.11.0+' 2.在application中初始化Fresco Fresco.initialize(this, ImagePipelineConfigFactory

JAVA實現圖片等比,圖片擷取功能--封裝類

import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.geom.AffineTransform; import java.

IOS基礎UI之(三)手寫UI和storyboard方式實現圖片移動和

手寫UI是最早進行UI介面佈局的方法,優點是靈活自由,缺點是使程式碼看起來比較長。平時學習的時候可以多嘗試手寫ui,這樣會更深入熟悉控制元件。storyboard開發效率相對比較高。實際開發中看情況而定!!      下面用這兩種方式分別實現圖片移動和縮放。 功能描述:  

java實現圖片裁剪、功能

import java.awt.Image; import java.awt.Rectangle; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.Buff

vue實現圖片按比例問題

getImg(src){ var img_url =src var img = new Image() img.src=img_url this.pictureHeight.height = Math.ceil(img.height/img.width *

用javascript實現圖片等比例

js部分: <script type="text/javascript"> $(window).load(function() {   ImageAutoResize('div[id=demotu]');   function ImageAutoResize(findstr)   {

viewPager+photoView實現網路圖片載入左右滑動+手勢功能+滑動到下一頁其他頁面恢復預設大小

前面兩篇文章,我們講了自定義viewpager+photoView實現本地圖片的載入和收縮縮放。實現本地相簿功能。 如果沒有看的話可以先閱讀以下,因為今天網路載入圖片的功能,實在這個基礎上做的修改,會基於之前的基礎上講解。 1.  http://blog.csdn.net

PNG透明圖片疊加(Opencv實現,包括旋轉以及邊界處理)

疊加效果原圖疊加圖片大致實現了一個四通道的PNG向量圖疊加到一個三通道的圖片上,函式如下:bool 疊加(cv::Mat &dst, cv::Mat &src,double scale = 1.0, //整體透明度double size = 1.0,//圖片縮

Android使用ViewPager實現圖片輪播和手勢滑動

ViewPager常用來實現圖片的輪播,比如淘寶首頁,會把一些促銷的商品的圖片和描述資訊來回的播放,這就是典型的使用ViewPager實現的。 ViewPager屬於佈局管理器,允許使用者通過頁面翻轉檢視左右的資料,下面通過一個例項來講解ViewPager實現圖片輪播和手

Android:使用ViewPager實現左右滑動切換圖片 (簡單版)

ViewPager,它是google SDk中自帶的一個附加包的一個類, 可以使檢視滑動。 步驟: 1、引入android-support-v4.jar包,在主佈局里加入 <android.support.v4.view.ViewPager android

Python圖片中的實現以及多種尺寸icon的生成

在pillow中圖片的縮放有兩種方式,1.使用resize函式,2,使用thumbnail函式 resize函式可以縮小,也可以放大 thumbnail只能縮小,不能放大 所以,如果你只打開一次圖片,要存出多個尺寸的話,要麼,從大到小開始縮放。 要麼,使用resize.建議

Android 通過ViewPager實現點選和滑動切換Fragment標籤頁

      如上圖效果,要切換 Fragment 標籤頁,可以通過點選標籤或者滑動標籤頁來實現。 網上應該有封裝好的開源庫可以直接利用,不過這裡介紹一下自己通過 ViewPager 實現該效果。 首先是佈局檔案: <?xml version="1.0" encodi

通過createObjectURL實現圖片預覽

files val 圖片 文件 his 瀏覽器緩存 targe urn void 實現原理:通過createObjectURL 創建一個臨時指向某地址的二進制對象。 過程:點擊觸發隱藏的 input file 的點擊事件,使用createObjectURL讀取 fil