欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android輪播圖點(diǎn)擊圖片放大效果的實(shí)現(xiàn)方法

 更新時(shí)間:2019年08月23日 08:23:33   作者:SoullessCoder  
這篇文章主要給大家介紹了關(guān)于Android輪播圖點(diǎn)擊圖片放大效果的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

最近項(xiàng)目中需要實(shí)現(xiàn)輪播圖顯示商品圖片,當(dāng)用戶點(diǎn)擊商品圖片的時(shí)候,需要圖片放大顯示,當(dāng)然用戶還能進(jìn)行多張圖片的滑動(dòng)切換,放大,縮小圖片等操作,實(shí)現(xiàn)起來相對(duì)還是比較簡(jiǎn)單的,話不多說,咱們是用代碼說話的,直接上代碼。

實(shí)現(xiàn)步驟:

1.效果圖的展示

2.項(xiàng)目中添加相關(guān)的依賴

3.主界面實(shí)現(xiàn)輪播圖的效果

4.點(diǎn)擊輪播圖進(jìn)入圖片放大展示頁面

5.圖片放大展示頁面所需的適配器

6.獲取fragment需要展示圖片的url

7.圖片縮放時(shí)遇到Bug解決

實(shí)現(xiàn)過程:

1.效果圖的展示

2.項(xiàng)目中添加相關(guān)的依賴

implementation 'com.youth.banner:banner:1.4.9'
implementation 'com.github.bumptech.glide:glide:4.5.0'
implementation 'com.commit451:PhotoView:1.2.4'

3.主界面實(shí)現(xiàn)輪播圖的效果

public class MainActivity extends AppCompatActivity implements OnBannerListener {

private Banner banner;
private ArrayList<String> list_path;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

initView();
initData();
initListener();
}

private void initView() {
banner = findViewById(R.id.banner);
}

private void initData() {
setBanner();//設(shè)置輪播圖
}

private void initListener() {

}

/**
* 設(shè)置輪播圖
*/
private void setBanner() {
//放圖片地址的集合
list_path = new ArrayList<>();
//設(shè)置圖片數(shù)據(jù)
list_path.add("https://sami-1256315447.picgz.myqcloud.com/article/201908/2a919def19fc47e3aa0d75d8c227ab1b.jpg");
list_path.add("https://sami-1256315447.picgz.myqcloud.com/article/201908/d027d1efc0564c44bb979ba0bd21f560.jpg");
list_path.add("https://sami-1256315447.picgz.myqcloud.com/article/201908/bbb930d66e5a48baa8d3c143544d7631.jpg");
list_path.add("https://sami-1256315447.picgz.myqcloud.com/article/201908/fb1721b8c9be4da9949fcdd26fc902a2.jpg");
list_path.add("https://sami-1256315447.picgz.myqcloud.com/article/201908/08b58dde9b284638b44e2d03c4cb9acf.jpg");
list_path.add("https://sami-1256315447.picgz.myqcloud.com/article/201908/d3caeb6129ee43df87f5c1e1058d96fc.jpg");
list_path.add("https://sami-1256315447.picgz.myqcloud.com/article/201908/9fd01c4add07473db31ba850f20a7232.jpg");
list_path.add("http://a.hiphotos.baidu.com/image/pic/item/00e93901213fb80e3b0a611d3fd12f2eb8389424.jpg");

//設(shè)置內(nèi)置樣式,共有六種可以點(diǎn)入方法內(nèi)逐一體驗(yàn)使用。
banner.setBannerStyle(BannerConfig.NUM_INDICATOR);
//設(shè)置圖片加載器,圖片加載器在下方
banner.setImageLoader(new ImgLoader());
//設(shè)置圖片網(wǎng)址或地址的集合
banner.setImages(list_path);
//設(shè)置輪播的動(dòng)畫效果,內(nèi)含多種特效,可點(diǎn)入方法內(nèi)查找后內(nèi)逐一體驗(yàn)
banner.setBannerAnimation(Transformer.Default);
//設(shè)置輪播間隔時(shí)間
banner.setDelayTime(3000);
//設(shè)置是否為自動(dòng)輪播,默認(rèn)是“是”
banner.isAutoPlay(true);
//設(shè)置指示器的位置,小點(diǎn)點(diǎn),左中右。
banner.setIndicatorGravity(BannerConfig.CENTER)
//以上內(nèi)容都可寫成鏈?zhǔn)讲季?,這是輪播圖的監(jiān)聽。比較重要。方法在下面。
.setOnBannerListener(this)
//必須最后調(diào)用的方法,啟動(dòng)輪播圖。
.start();
}

//輪播圖的監(jiān)聽方法
@Override
public void OnBannerClick(int position) {
Intent intent = new Intent(this, BigImgActivity.class);
intent.putStringArrayListExtra("imgData", list_path);
intent.putExtra("clickPosition", position);
startActivity(intent);
}

//自定義的圖片加載器
private class ImgLoader extends ImageLoader {
@Override
public void displayImage(Context context, Object path, ImageView imageView) {
Glide.with(context).load((String) path).into(imageView);
}
}
}

4.點(diǎn)擊輪播圖進(jìn)入圖片放大展示頁面

public class BigImgActivity extends AppCompatActivity {
private ViewPagerFixed viewPager;
private TextView tvNum;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_big_img);
initView();
}

private void initView() {
viewPager = findViewById(R.id.viewpager);
tvNum = findViewById(R.id.tv_num);

//接收?qǐng)D片數(shù)據(jù)及位置
final ArrayList<String> imgData = getIntent().getStringArrayListExtra("imgData");
int clickPosition = getIntent().getIntExtra("clickPosition", 0);

//添加適配器
PhotoPagerAdapter viewPagerAdapter = new PhotoPagerAdapter(getSupportFragmentManager(), imgData);
viewPager.setAdapter(viewPagerAdapter);
viewPager.setCurrentItem(clickPosition);//設(shè)置選中圖片位置

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
tvNum.setText(String.valueOf(position + 1) + "/" + imgData.size());
}

@Override
public void onPageSelected(int position) {
}

@Override
public void onPageScrollStateChanged(int state) {

}
});
}
}

5.圖片放大展示頁面所需的適配器

/**
* 滑動(dòng)圖片ViewPager適配器
*/
public class PhotoPagerAdapter extends FragmentPagerAdapter {

private final ArrayList<String> urlList;

public PhotoPagerAdapter(FragmentManager fm, ArrayList<String> urlList) {
super(fm);
this.urlList=urlList;
}

@Override
public Fragment getItem(int position) {
return PhotoFragment.newInstance(urlList.get(position));
}

@Override
public int getCount() {
return urlList.size();
}
}

6.獲取fragment需要展示圖片的url

public class PhotoFragment extends Fragment {

private String url;
private PhotoView mPhotoView;

/**
* 獲取這個(gè)fragment需要展示圖片的url
*
* @param url
* @return
*/
public static PhotoFragment newInstance(String url) {
PhotoFragment fragment = new PhotoFragment();
Bundle args = new Bundle();
args.putString("url", url);
fragment.setArguments(args);
return fragment;
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
url = getArguments().getString("url");
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_img, container, false);
mPhotoView = view.findViewById(R.id.photoview);
//設(shè)置縮放類型,默認(rèn)ScaleType.CENTER(可以不設(shè)置)
// mPhotoView.setScaleType(ImageView.ScaleType.CENTER);

//長(zhǎng)按事件
mPhotoView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
//Toast.makeText(getActivity(), "長(zhǎng)按事件", Toast.LENGTH_SHORT).show();
return true;
}
});

//點(diǎn)擊事件
mPhotoView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() {
@Override
public void onPhotoTap(View view, float x, float y) {
//Toast.makeText(getActivity(), "點(diǎn)擊事件,真實(shí)項(xiàng)目中可關(guān)閉activity", Toast.LENGTH_SHORT).show();
getActivity().finish();
}
});


Glide.with(getContext())
.load(url)
// .placeholder(R.mipmap.ic_launcher)//加載過程中圖片未顯示時(shí)顯示的本地圖片
// .error(R.mipmap.ic_launcher)//加載異常時(shí)顯示的圖片
//.centerCrop()//圖片圖填充ImageView設(shè)置的大小
// .fitCenter()//縮放圖像測(cè)量出來等于或小于ImageView的邊界范圍,該圖像將會(huì)完全顯示
.into(mPhotoView);
return view;
}
}

7.圖片縮放時(shí)遇到Bug解決

在測(cè)試的過程中,對(duì)放大的圖片進(jìn)行縮放的時(shí)候,遇到下面的Bug:

java.lang.IllegalArgumentException: pointerIndex out of range

在做多點(diǎn)觸控放大縮小,操作自己所繪制的圖形時(shí)發(fā)生這個(gè)異常,如果是操作圖片的放大縮小多點(diǎn)觸控不會(huì)出現(xiàn)這個(gè)錯(cuò)誤
這個(gè)bug是Android系統(tǒng)原因 。

問題解決方案:

自定義ViewPager,重寫onTouchEvent 和onInterceptTouchEvent

public class ViewPagerFixed extends android.support.v4.view.ViewPager {

public ViewPagerFixed(Context context) {
super(context);
}

public ViewPagerFixed(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
try {
return super.onTouchEvent(ev);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
try {
return super.onInterceptTouchEvent(ev);
} catch (IllegalArgumentException ex) {
ex.printStackTrace();
}
return false;
}
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff">

<com.showly.testimagedemo.view.ViewPagerFixed
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<TextView
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:textColor="#ffffff"
android:textSize="30sp" />

</RelativeLayout>

實(shí)現(xiàn)過程就這樣完成了。

需要Demo源碼:點(diǎn)擊這里

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • Kotlin中空判斷處理操作實(shí)例

    Kotlin中空判斷處理操作實(shí)例

    最近使用kotlin重構(gòu)項(xiàng)目,遇到了一個(gè)小問題,在Java中,可能會(huì)遇到判斷某個(gè)對(duì)象是否為空,為空?qǐng)?zhí)行一段邏輯,不為空?qǐng)?zhí)行另外一段邏輯,下面這篇文章主要給大家介紹了關(guān)于Kotlin中空判斷處理操作的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • Android實(shí)現(xiàn)分享功能

    Android實(shí)現(xiàn)分享功能

    如何在Android中實(shí)現(xiàn)分享功能?這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)分享功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Android GuideView實(shí)現(xiàn)首次登陸引導(dǎo)

    Android GuideView實(shí)現(xiàn)首次登陸引導(dǎo)

    這篇文章主要為大家詳細(xì)介紹了Android GuideView實(shí)現(xiàn)首次登陸引導(dǎo),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • android 中ProgressDialog實(shí)現(xiàn)全屏效果的示例

    android 中ProgressDialog實(shí)現(xiàn)全屏效果的示例

    本篇文章主要介紹了android 中ProgressDialog實(shí)現(xiàn)全屏效果的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • 詳解Android Ashmem匿名共享內(nèi)存

    詳解Android Ashmem匿名共享內(nèi)存

    這篇文章主要介紹了Android Ashmem匿名共享內(nèi)存的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04
  • android獲取屏幕像素思路及代碼

    android獲取屏幕像素思路及代碼

    本文為大家詳細(xì)介紹下android是怎樣獲取屏幕像素的,感興趣的各位可以參考下哈,希望對(duì)你學(xué)習(xí)android有所幫助
    2013-04-04
  • Android 購物車加減功能的實(shí)現(xiàn)代碼

    Android 購物車加減功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Android 實(shí)現(xiàn)購物車加減功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • android 9.0 launcher3 去掉抽屜式顯示所有 app(代碼詳解)

    android 9.0 launcher3 去掉抽屜式顯示所有 app(代碼詳解)

    本文通過實(shí)例代碼給大家介紹了android 9.0 Launcher3 去掉抽屜式,顯示所有 app,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Android基于PhotoView實(shí)現(xiàn)的頭像/圓形裁剪控件

    Android基于PhotoView實(shí)現(xiàn)的頭像/圓形裁剪控件

    這篇文章主要給大家介紹了關(guān)于Android基于PhotoView實(shí)現(xiàn)的頭像/圓形裁剪控件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 詳解Android系統(tǒng)啟動(dòng)過程

    詳解Android系統(tǒng)啟動(dòng)過程

    這篇文章主要介紹了Android系統(tǒng)啟動(dòng)過程的相關(guān)資料,幫助大家更好得理解和學(xué)習(xí)使用Android,感興趣的朋友可以了解下
    2021-03-03

最新評(píng)論