日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

android使用ViewPager實(shí)現(xiàn)圖片自動(dòng)切換

瀏覽:201日期:2022-09-27 09:30:46

本文實(shí)現(xiàn)viewpager圖片輪播的功能、左右滑動(dòng)的時(shí)候能夠流暢的切換圖片、并且沒(méi)有邊界限制

1、activity_main.xml布局

<RelativeLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='match_parent' > <RelativeLayout android: android:layout_width='match_parent' android:layout_height='match_parent'/> </RelativeLayout>

因?yàn)槲业腣iewPager是繼承RelativeLayout

2、layout_recommend_item.xml中的布局

<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' android:orientation='vertical' android:layout_width='match_parent' android:layout_height='match_parent'> <ImageView android: android:layout_width='match_parent' android:layout_height='match_parent' android:src='http://m.b3g6.com/bcjs/@mipmap/ic_launcher' android:layout_weight='1'/> <TextView android: android:text='123' android:layout_width='match_parent' android:layout_height='wrap_content' /> </LinearLayout>

ImageView是顯示圖片 TextView用來(lái)顯示每一個(gè)pager的標(biāo)題

3、MyViewPager類,因?yàn)閳D個(gè)方便,把能夠?qū)崿F(xiàn)這個(gè)功能否合成一個(gè)類、這樣用起來(lái)比較方便

import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.os.Handler;import android.os.Message;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.util.DisplayMetrics;import android.util.Log;import android.util.TypedValue;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.RelativeLayout;import android.widget.TextView; import java.util.ArrayList;import java.util.List; public class MyViewPager extends RelativeLayout { private static final int START_SCROLL = 1; private static final int SCROLL_NEXT = 2; private static final int SHOW_TIME = 5000;//顯示時(shí)間 private List<String> mDatas = new ArrayList<>();//viewpager每一頁(yè)對(duì)應(yīng)的標(biāo)題 private ViewPager mPager; private Context mContext; private int mWidth, mHeight; //viewpager的寬高 private int mTitleHeight; //標(biāo)題高度 private TipView mTipView; //標(biāo)題對(duì)應(yīng)的view //在主ui中更新viewpager,也就是切換圖片 private static Handler sHandler = new Handler() { @Override public void handleMessage(Message msg) { int w = msg.what; ViewPager pager = (ViewPager) msg.obj; switch (w) { case START_SCROLL: pager.setCurrentItem(msg.arg1, true); break; case SCROLL_NEXT: pager.setCurrentItem(msg.arg1, true); break; } } }; /** * 構(gòu)造函數(shù) * @param context content * @param w 要顯示的viewpager的寬 * @param h 要顯示的viewpager的高 */ public MyViewPager(Context context, int w, int h) { super(context); mContext = context; mWidth = w; mHeight = h; initView(); //取得數(shù)據(jù) 左邊隨便取的 只是為了看起來(lái)有效果// 對(duì)viewpager滑動(dòng)進(jìn)行監(jiān)聽(tīng) mPager.setOnPageChangeListener(new MOnPagerChangeListener()); init(); DisplayMetrics dm = mContext.getResources().getDisplayMetrics(); mTitleHeight = cm_DptoPx(48, dm); } /** * 對(duì)viewpager控件進(jìn)行繪制寬高 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { ViewGroup.LayoutParams vp = getLayoutParams(); if (vp != null) { vp.width = mWidth; vp.height = mHeight; } super.onMeasure(widthMeasureSpec, heightMeasureSpec); } /** * 把dp轉(zhuǎn)化成px */ public static int cm_DptoPx(int dp,DisplayMetrics dis){ return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, dis); } private void init() { getData(); } private void initView() { mPager = new ViewPager(mContext); RelativeLayout.LayoutParams rp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); addView(mPager, rp); } public void getData() { for (int i = 0; i < 4 ; i++){ mDatas.add(i,'viewpager'+i); } sHandler.postDelayed(new Runnable() { @Override public void run() { stopAnimation(); initTipView(); mPager.setAdapter(new RecommendAdapter()); mPager.setCurrentItem(10000 * mDatas.size()); } }, 2000); } /** * 刪除隊(duì)列中的消息 */ public void stopAnimation() { sHandler.removeMessages(START_SCROLL); sHandler.removeMessages(SCROLL_NEXT); } public void startAnimation() { if (mDatas.size() == 0) { return; } Message msg = sHandler.obtainMessage(START_SCROLL); msg.obj = mPager; msg.arg1 = (mPager.getCurrentItem() + 1);//取得后一張圖片 sHandler.sendMessageDelayed(msg, SHOW_TIME);//5秒后發(fā)送給ui線程 } /** * 對(duì)標(biāo)題view移動(dòng)的光標(biāo)初始化 */ private void initTipView() { if (mTipView == null) { RelativeLayout.LayoutParams rp = new RelativeLayout.LayoutParams(10, 10); rp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); rp.bottomMargin = mTitleHeight; mTipView = new TipView(mContext, mDatas.size()); addView(mTipView, rp); } else { mTipView.setCount(mDatas.size()); } } private class MOnPagerChangeListener implements ViewPager.OnPageChangeListener { private int curState; @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int i) { //滑動(dòng)結(jié)束 sHandler.removeMessages(SCROLL_NEXT); sHandler.removeMessages(START_SCROLL); if(curState == ViewPager.SCROLL_STATE_DRAGGING){ return; } Message msg = sHandler.obtainMessage(SCROLL_NEXT); msg.arg1 = i + 1; msg.obj = mPager; sHandler.sendMessageDelayed(msg, SHOW_TIME); mTipView.setCurPostion(i % mDatas.size()); } @Override public void onPageScrollStateChanged(int i) { //正在滑動(dòng)時(shí) curState = i; if(i == ViewPager.SCROLL_STATE_DRAGGING){ //SCROLL_STATE_DRAGGING正在滑動(dòng) SCROLL_STATE_IDLE什么都沒(méi)有做 //SCROLL_STATE_SETTLING 滑動(dòng)完畢 stopAnimation(); }else { if(!(sHandler.hasMessages(START_SCROLL)&&sHandler.hasMessages(SCROLL_NEXT))){ startAnimation(); } } } } private class RecommendAdapter extends PagerAdapter { @Override public Object instantiateItem(ViewGroup container, int position) { Log.i('MyViewPager','instantiateItem '); int curPos = position % mDatas.size(); View view = View.inflate(mContext, R.layout.layout_recommend_item, null); ViewGroup.LayoutParams vp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); ImageView iv = (ImageView) view.findViewById(R.id.iv_pic); TextView tv = (TextView) view.findViewById(R.id.tv_desc); tv.setText(mDatas.get(curPos)); container.addView(view, vp); view.setTag(curPos); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } }); return view; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object o) { return view == o; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } private class TipView extends View { private int mPadding; private int mCount; private int mCurPos; private Paint mNorPaint; private Paint mSelPaint; private int mHeight; public TipView(Context context, int count) { super(context); mNorPaint = new Paint(); mNorPaint.setAntiAlias(true); DisplayMetrics dm = context.getResources().getDisplayMetrics(); int selHeight = cm_DptoPx(2, dm); int norHeight = cm_DptoPx(1, dm); mHeight = cm_DptoPx(2, dm); mNorPaint.setStrokeWidth(norHeight); mNorPaint.setColor(Color.argb(80, 255, 255, 255)); mSelPaint = new Paint(); mSelPaint.setAntiAlias(true); mSelPaint.setStrokeWidth(selHeight); mSelPaint.setColor(Color.WHITE); mCount = count; mPadding = cm_DptoPx(0, dm); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int ow = (getWidth()-2*mPadding)/ mCount; int y = getHeight() / 2; canvas.drawLine(mPadding, y, mCurPos * ow + mPadding, y, mNorPaint); canvas.drawLine(mCurPos * ow + mPadding, y, (mCurPos + 1) * ow + mPadding, y, mSelPaint); canvas.drawLine((mCurPos + 1) * ow + mPadding, y, getWidth() - mPadding, y, mNorPaint); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { ViewGroup.LayoutParams vp = getLayoutParams(); vp.width = ViewGroup.LayoutParams.MATCH_PARENT; vp.height = mHeight; super.onMeasure(widthMeasureSpec, heightMeasureSpec); } public void setCurPostion(int pos) { mCurPos = pos; invalidate(); } public void setCount(int count) { mCount = count; } }}

4、還有MainActivity中的實(shí)現(xiàn)

import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.widget.RelativeLayout; public class MainActivity extends Activity { private RelativeLayout mViewPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DisplayMetrics dm = getResources().getDisplayMetrics(); mViewPager = (RelativeLayout) findViewById(R.id.my_viewpager); mViewPager.addView(new MyViewPager(getApplicationContext(),dm.widthPixels ,(dm.widthPixels)/2)); }}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
六月丁香综合| 精品三级在线观看视频| 三上亚洲一区二区| 国产日韩欧美一区在线| 丝袜脚交一区二区| 不卡一区2区| а√天堂8资源在线| 蜜桃精品视频| 美女在线视频一区| 国产探花一区| 国产一区二区三区久久| 鲁大师成人一区二区三区| 久久精品播放| 欧洲激情综合| 999久久久精品国产| 日韩另类视频| 精品三区视频| 另类专区亚洲| 免费久久精品| 欧美成人精品一级| 国产精品22p| 国产成人免费av一区二区午夜| 久久97视频| 国产中文字幕一区二区三区| 国产一区二区三区黄网站| 久久99精品久久久久久园产越南| 久久国产精品色av免费看| 亚洲精品福利电影| 欧美~级网站不卡| 日本不卡一二三区黄网| 久久在线91| 亚洲最新无码中文字幕久久| 韩国精品主播一区二区在线观看| 神马日本精品| 欧美日韩一区二区三区四区在线观看 | 精品国产乱码| 高清一区二区| 欧美成人综合| 国产欧美日韩一区二区三区四区| 亚洲a在线视频| 亚洲色图综合| 国产欧洲在线| 精品久久久久中文字幕小说| 国产精品毛片一区二区三区| 国户精品久久久久久久久久久不卡| 欧美a级片一区| 国产偷自视频区视频一区二区| 综合干狼人综合首页| 国产一区导航| 香蕉久久久久久| 久久久久久色 | 久久激情av| 国产精品乱战久久久| 亚洲香蕉久久| 在线观看精品| 色综合视频一区二区三区日韩| 日韩欧美中文字幕在线视频| 欧美.日韩.国产.一区.二区| 在线观看视频免费一区二区三区| 国产成人1区| 亚洲一二av| 欧美在线影院| 激情欧美一区二区三区| 久久夜夜操妹子| 久久精品一区| 国产精品一在线观看| 欧美日韩一区自拍| 日韩欧美中文字幕在线视频| 欧美日韩国产在线一区| 国产精品igao视频网网址不卡日韩| 天堂成人国产精品一区| 成人精品亚洲| 福利视频一区| 色狠狠一区二区三区| 性欧美69xoxoxoxo| 国产白浆在线免费观看| 欧美激情视频一区二区三区免费 | 高清av一区| 亚洲福利免费| 日本不卡一二三区黄网| 88久久精品| 在线观看一区| 在线亚洲一区| 欧美肉体xxxx裸体137大胆| 免费国产亚洲视频| 欧美日一区二区在线观看| 韩国女主播一区二区三区| 亚洲福利一区| 久久国内精品自在自线400部| 麻豆极品一区二区三区| 久久高清免费| 亚洲另类黄色| 日韩中文影院| 午夜性色一区二区三区免费视频| 国产成人精品一区二区三区在线| 国产96在线亚洲| 亚洲婷婷在线| 国产美女视频一区二区| 蜜桃视频欧美| 久久亚洲精品中文字幕| 99国产精品久久久久久久成人热 | 麻豆国产精品视频| 一区视频在线| 国产精品草草| 人人爱人人干婷婷丁香亚洲| 久久精品官网| 97精品久久| 蜜桃视频一区二区三区在线观看| 日本va欧美va精品发布| 日韩电影免费网址| 日韩精品一区二区三区中文字幕| 99国产精品| 四虎4545www国产精品 | 久久国产三级| 日韩精品麻豆| 国产一区二区三区探花| 日韩欧美在线精品| 国产婷婷精品| 日韩综合小视频| 9国产精品视频| 正在播放日韩精品| 电影91久久久| 欧美一级鲁丝片| 日韩黄色大片| 国产一区二区中文| 国产日韩电影| 日本а中文在线天堂| 久久久久亚洲精品中文字幕| 亚洲影视一区| 欧洲毛片在线视频免费观看| 欧洲av一区二区| 91欧美在线| 91精品一区二区三区综合在线爱| 99久久亚洲精品| 1024精品一区二区三区| 欧美亚洲人成在线| 蜜桃传媒麻豆第一区在线观看| 国产情侣一区在线| 国产精品久久久久久久久久久久久久久 | 中文字幕人成乱码在线观看| 麻豆国产精品一区二区三区| 日韩不卡免费视频| 日韩一区免费| 日韩精品久久理论片| 国产欧美自拍| 午夜av不卡| 1024精品久久久久久久久| 久久成人一区| 久久精品天堂| 亚洲一区二区三区四区五区午夜| 色综合视频一区二区三区日韩 | 蜜臀a∨国产成人精品| 五月婷婷亚洲| 99国产精品久久久久久久| 亚洲欧美日本国产| 久久av免费看| japanese国产精品| 91精品国产自产观看在线| 国产日本精品| 国产精品老牛| 成人在线超碰| 久久精品高清| 免费在线日韩av| 日韩欧美视频专区| 欧美久久天堂| 精品资源在线| 亚洲第一精品影视| 久久国产人妖系列| 水蜜桃久久夜色精品一区的特点| 国产精品自在| 性欧美69xoxoxoxo| 精品视频一区二区三区在线观看| 久久国产电影| 国产一区国产二区国产三区| 成人羞羞视频在线看网址| 91麻豆精品| 日韩精品一区第一页| 久久久久国产精品一区三寸| 国产亚洲亚洲| 成人免费一区| 午夜久久av| 国产亚洲一区在线| 欧美日韩四区| 91精品精品| 欧美三区四区| 精品视频自拍| 天海翼亚洲一区二区三区| 欧美福利一区| 99久精品视频在线观看视频| 成人久久一区| 国产suv精品一区| 欧美日韩亚洲一区二区三区在线| 国产一区白浆| av一区二区高清| 欧美精品高清| 欧美sss在线视频| 国产一区二区三区四区大秀| 久久丁香四色| 国产成人免费精品| 丰满少妇一区|