最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android編程滑動(dòng)效果之Gallery+GridView實(shí)現(xiàn)圖片預(yù)覽功能(附demo源碼下載)

 更新時(shí)間:2016年02月12日 11:52:24   作者:陽(yáng)光島主  
這篇文章主要介紹了Android編程滑動(dòng)效果之Gallery+GridView實(shí)現(xiàn)圖片預(yù)覽功能,結(jié)合實(shí)例形式分析了Android通過(guò)GridView和Gallery兩個(gè)控件模仿Gallery圖像集圖片預(yù)覽功能,并附帶demo源碼供讀者下載參考,需要的朋友可以參考下

本文實(shí)例講述了Android編程滑動(dòng)效果之Gallery+GridView實(shí)現(xiàn)圖片預(yù)覽功能。分享給大家供大家參考,具體如下:

Android系統(tǒng)自帶一個(gè)GridView和Gallery兩個(gè)控件,GridView網(wǎng)格顯示,Gallery單個(gè)瀏覽,兩者結(jié)合起來(lái)可以真正實(shí)現(xiàn)Gallery瀏覽圖片效果。

本示例通過(guò)GridView和Gallery兩個(gè)控件,模仿實(shí)現(xiàn)一個(gè)完整的仿Gallery圖像集的圖片瀏覽效果。效果圖如下:

1、GridView

首先,自定義一個(gè)GridImageAdapter圖片適配器,用于填充GridView控件的圖片

public class GridImageAdapter extends BaseAdapter {
  private Context mContext;
  Drawable btnDrawable;
  public GridImageAdapter(Context context) {
    mContext = context;
    Resources resources = context.getResources();
    btnDrawable = resources.getDrawable(R.drawable.bg);
  }
  @Override
  public int getCount() {
    return ImageSource.mThumbIds.length;
  }
  @Override
  public Object getItem(int position) {
    return position;
  }
  @Override
  public long getItemId(int position) {
    return position;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    ImageViewExt imageView;
    int space;
    if (convertView == null) {
      imageView = new ImageViewExt(mContext);
      if (imageCol == 5) {
        space = dm.heightPixels / imageCol - 6;
        imageView.setLayoutParams(new GridView.LayoutParams(space, space));
      } else {
        space = dm.widthPixels / imageCol - 6;
        imageView.setLayoutParams(new GridView.LayoutParams( space, space));
      }
      imageView.setAdjustViewBounds(true);
      imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);  // 縮放圖片使其長(zhǎng)和寬一樣
       imageView.setPadding(3, 3, 3, 3);
    } else {
      imageView = (ImageViewExt) convertView;
    }
    imageView.setImageResource(ImageSource.mThumbIds[position]);
    return imageView;
  }
}

然后,用GridImageAdapter填充GridView

gridView = (GridView) findViewById(R.id.myGrid);
gridImageAdapter = new GridImageAdapter(this);
gridView.setAdapter(gridImageAdapter);
gridView.setOnItemClickListener(listener); // 設(shè)置點(diǎn)擊監(jiān)聽(tīng)事件

最后,設(shè)置GridView控件的點(diǎn)擊監(jiān)聽(tīng)事件

AdapterView.OnItemClickListener listener = new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
    Intent intent = new Intent();
    intent.setClass(GridViewActivity.this, GalleryActivity.class);
    intent.putExtra("position", position);
    startActivity(intent);
  }
};

2、Gallery

完成了GridView的圖片顯示、監(jiān)聽(tīng)事件后,現(xiàn)在點(diǎn)擊圖片,會(huì)啟動(dòng)一個(gè)Activity來(lái)顯示當(dāng)前點(diǎn)擊的圖片,此時(shí)顯示圖片的控件便是Gallery

首先,同GridView一樣,自定義一個(gè)ImageAdapter圖片適配器,用來(lái)填充Gallery

public class ImageAdapter extends BaseAdapter {
  private Context mContext;
  private int mPos;
  public ImageAdapter(Context context) {
    mContext = context;
  }
  public void setOwnposition(int ownposition) {
    this.mPos = ownposition;
  }
  public int getOwnposition() {
    return mPos;
  }
  @Override
  public int getCount() {
    return ImageSource.mThumbIds.length;
  }
  @Override
  public Object getItem(int position) {
    mPos=position;
    return position;
  }
  @Override
  public long getItemId(int position) {
    mPos=position;
    return position;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    mPos=position;
    ImageView imageview = new ImageView(mContext);
    imageview.setBackgroundColor(0xFF000000);
    imageview.setScaleType(ImageView.ScaleType.FIT_CENTER);
    imageview.setLayoutParams(new myGallery.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
    imageview.setImageResource(ImageSource.mThumbIds[position]);
    return imageview;
  }
}

然后,用ImageAdapter填充Gallery

myGallery galllery = (myGallery) findViewById(R.id.mygallery);
Intent intent = getIntent();
position = intent.getIntExtra("position", 0); // 獲取GridViewActivity傳來(lái)的圖片位置position
ImageAdapter imgAdapter=new ImageAdapter(this);
galllery.setAdapter(imgAdapter); // 設(shè)置圖片ImageAdapter
galllery.setSelection(position); // 設(shè)置當(dāng)前顯示圖片
  Animation an= AnimationUtils.loadAnimation(this,R.anim.scale ); // Gallery動(dòng)畫
  galllery.setAnimation(an);

此時(shí),如果細(xì)心可以注意到,我們的Gallery也是自己定義的myGallery,具體定義如下:

public class myGallery extends Gallery {
  boolean isFirst = false;
  boolean isLast = false;
  public myGallery(Context context) {
    super(context);
  }
  public myGallery(Context context, AttributeSet paramAttributeSet) {
    super(context, paramAttributeSet);
  }
  /** 是否向左滑動(dòng)(true - 向左滑動(dòng); false - 向右滑動(dòng)) */
  private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) {
    return e2.getX() > e1.getX();
  }
  @Override
  public boolean onFling(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    ImageAdapter ia = (ImageAdapter) this.getAdapter();
    int p = ia.getOwnposition(); // 獲取當(dāng)前圖片的position
    int count = ia.getCount(); // 獲取全部圖片的總數(shù)count
    int kEvent;
    if (isScrollingLeft(e1, e2)) {
      if (p == 0 && isFirst) {
        Toast.makeText(this.getContext(), "已是第一頁(yè)", Toast.LENGTH_SHORT).show();
      } else if (p == 0) {
        isFirst = true;
      } else {
        isLast = false;
      }
      kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
    } else {
      if (p == count - 1 && isLast) {
        Toast.makeText(this.getContext(), "已到最后一頁(yè)", Toast.LENGTH_SHORT).show();
      } else if (p == count - 1) {
        isLast = true;
      } else {
        isFirst = false;
      }
      kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
    }
    onKeyDown(kEvent, null);
    return true;
  }
}

GalleryActivity的布局文件gallery.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:gravity="center"
  android:orientation="horizontal"
  android:padding="10dip" >
  <RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#000000"
    android:padding="2dip" >
    <com.homer.gridgallery.myGallery
      android:id="@+id/mygallery"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:spacing="16dp" />
  </RelativeLayout>
</LinearLayout>

完整實(shí)例代碼點(diǎn)擊此處本站下載。

更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android開(kāi)發(fā)動(dòng)畫技巧匯總》、《Android開(kāi)發(fā)入門與進(jìn)階教程》及《Android控件用法總結(jié)》。

希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 基于Android SQLite的使用介紹

    基于Android SQLite的使用介紹

    本篇文章小編為大家介紹,基于Android SQLite的使用說(shuō)明,需要的朋友參考下
    2013-04-04
  • 淺談Android textview文字對(duì)齊換行的問(wèn)題

    淺談Android textview文字對(duì)齊換行的問(wèn)題

    下面小編就為大家分享一篇淺談Android textview文字對(duì)齊換行的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • Android編程基于自定義View實(shí)現(xiàn)絢麗的圓形進(jìn)度條功能示例

    Android編程基于自定義View實(shí)現(xiàn)絢麗的圓形進(jìn)度條功能示例

    這篇文章主要介紹了Android編程基于自定義View實(shí)現(xiàn)絢麗的圓形進(jìn)度條功能,結(jié)合實(shí)例形式詳細(xì)分析了Android自定義view實(shí)現(xiàn)圓形進(jìn)度條的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • Android Studio中導(dǎo)入module的方法(簡(jiǎn)單版)

    Android Studio中導(dǎo)入module的方法(簡(jiǎn)單版)

    這篇文章主要介紹了AndroidStudio中導(dǎo)入module的方法,本文是一篇簡(jiǎn)易版的教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 淺談Android中適配器的notifyDataSetChanged()為何有時(shí)不刷新

    淺談Android中適配器的notifyDataSetChanged()為何有時(shí)不刷新

    這篇文章主要介紹了淺談Android中適配器的notifyDataSetChanged()為何有時(shí)不刷新,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Android開(kāi)發(fā)改變字體顏色方法

    Android開(kāi)發(fā)改變字體顏色方法

    用以下方法基本上可以解決大多數(shù)字體顏色設(shè)置問(wèn)題,先發(fā)一篇,后續(xù)繼續(xù)發(fā)一篇高級(jí)的,通過(guò)用戶選擇的方式,改變字體顏色。
    2015-05-05
  • Android集成騰訊X5實(shí)現(xiàn)文檔瀏覽功能

    Android集成騰訊X5實(shí)現(xiàn)文檔瀏覽功能

    Android內(nèi)部沒(méi)有控件來(lái)直接顯示文檔,跳轉(zhuǎn)WPS或其他第三方文檔App體驗(yàn)性不好,使用騰訊X5內(nèi)核能很好的解決的這一問(wèn)題這篇文章主要介紹了Android集成騰訊X5實(shí)現(xiàn)文檔瀏覽功能,需要的朋友可以參考下
    2019-10-10
  • Android分享微信小程序技巧之圖片優(yōu)化

    Android分享微信小程序技巧之圖片優(yōu)化

    這篇文章主要給大家介紹了關(guān)于Android分享微信小程序技巧之圖片優(yōu)化的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • 詳解Android ViewPager2中的緩存和復(fù)用機(jī)制

    詳解Android ViewPager2中的緩存和復(fù)用機(jī)制

    最近接觸到豎向整頁(yè)滑動(dòng)的需求,發(fā)現(xiàn)了viewpager2,viewpager2支持fragment,保留了viewpager的特性,下面這篇文章主要給大家介紹了關(guān)于ViewPager2中的緩存和復(fù)用機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2021-11-11
  • Android實(shí)現(xiàn)用代碼簡(jiǎn)單安裝和卸載APK的方法

    Android實(shí)現(xiàn)用代碼簡(jiǎn)單安裝和卸載APK的方法

    這篇文章主要介紹了Android實(shí)現(xiàn)用代碼簡(jiǎn)單安裝和卸載APK的方法,涉及Android針對(duì)APK文件及package的相關(guān)操作技巧,需要的朋友可以參考下
    2016-08-08

最新評(píng)論

克拉玛依市| 济阳县| 吴川市| 岳普湖县| 北票市| 改则县| 田阳县| 泰兴市| 长沙市| 玛纳斯县| 涡阳县| 惠来县| 宕昌县| 长宁区| 崇义县| 黄山市| 济阳县| 调兵山市| 鲁甸县| 石家庄市| 泰和县| 曲阳县| 延川县| 枣阳市| 崇明县| 镇赉县| 福安市| 龙泉市| 特克斯县| 丰宁| 武功县| 陆丰市| 上虞市| 苍山县| 吴江市| 甘孜县| 新民市| 太康县| 太原市| 武宁县| 长武县|