效果如圖:
在宜昌等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站制作 網(wǎng)站設(shè)計制作定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè),宜昌網(wǎng)站建設(shè)費用合理。

首先說下方的這幾個點,這個點不是圖片效果,而是Android自帶的shape畫的橢圓,使橢圓的寬高一樣,就變成原型,然后設(shè)置顏色即可。
這2個點的代碼如下:
紅色點的代碼
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="8dp" android:height="8dp"/> <solid android:color="#ff00"/> </shape>
灰色點的代碼
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> <size android:width="8dp" android:height="8dp"/> <solid android:color="#44000000"/> </shape>
整體思路:
1、要展示viewpager,就要先把圖片獲取,圖片是放在drawable-hdpi里的5張圖片。
2、把圖片放到一個list里,這個類似listview
3、利用viewpager的適配器,展示圖片
4、在圖片的適配器里根據(jù)位置加載每個圖片資源,同時把圖片下方的文字和選中的點顯示
5、同時在適配器里要銷毀已經(jīng)隱藏的圖片占用的資源
6、截止上一步,已經(jīng)可以滑動圖片了,但是圖片滑動時,文字和點沒有跟著變化,此時需要利用viewpage人的滑動監(jiān)聽,來處理文字變化和點的變化
7、viewpager有一個
viewpager.addOnPageChangeListener(new MyOnPageChangeListener());
監(jiān)聽,就new一個內(nèi)部類,在內(nèi)部類里通過圖片滑動時的回調(diào)方法來實現(xiàn)。具體代碼如下
MainActivity.java
package com.yuanlp.viewpager;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private ViewPager viewpager;
private TextView tv_title;
private LinearLayout ll_point_group;
private List<ImageView> p_w_picpathviews; //存放p_w_picpathview的集合,以便后期放入pageadapter中
//圖片資源ID
private final int[] p_w_picpathIDs={
R.drawable.a,
R.drawable.b,
R.drawable.c,
R.drawable.d,
R.drawable.e
};
//圖片標題集合
private final String[] p_w_picpathDescriptions={
"硅谷拔河比賽",
"凝聚你我,放飛夢想",
"抱歉,滿座了",
"七月熱浪滔天",
"加油努力學(xué)習(xí)"
};
//上一次點位高亮顯示的位置
private int prePosition=0;
//為了使廣告隔段時間自動切換下一張圖片,需要在此用到Handler
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
int item=viewpager.getCurrentItem()+1;
viewpager.setCurrentItem(item);
//延遲發(fā)消息
handler.sendEmptyMessageDelayed(0,4000);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewpager= (ViewPager) findViewById(R.id.viewpager);
tv_title= (TextView) findViewById(R.id.tv_title);
ll_point_group= (LinearLayout) findViewById(R.id.ll_point_group);
p_w_picpathviews=new ArrayList<ImageView>();
MyPagerAdapter pagerAdapter=new MyPagerAdapter();
for (int i=0;i<p_w_picpathIDs.length;i++){
//在這里把p_w_picpath一個一個new出來
ImageView p_w_picpathView=new ImageView(this);
//這里引用圖片設(shè)置為背景而不是src,是因為src可能會導(dǎo)致填充不完全
p_w_picpathView.setBackgroundResource(p_w_picpathIDs[i]);
//添加到集合
p_w_picpathviews.add(p_w_picpathView);
//添加點
ImageView point=new ImageView(this);
point.setBackgroundResource(R.drawable.selectors);
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(8,8); //2個參數(shù)是寬和高
if (i==0){
point.setEnabled(true); //默認第0個顯示紅色選中
}else{
point.setEnabled(false); //其他為灰色
params.leftMargin=8; //設(shè)置和左邊的為8個像素的間距
}
point.setLayoutParams(params);
//添加到線性布局里
ll_point_group.addView(point);
}
viewpager.setAdapter(pagerAdapter);
//設(shè)置viewpage頁面滑動的監(jiān)聽
viewpager.addOnPageChangeListener(new MyOnPageChangeListener());
//設(shè)置中間位置,保證頁面剛開始時,可以從左向右滑動
int item= Integer.MAX_VALUE/2- Integer.MAX_VALUE/2%p_w_picpathviews.size(); //保證是p_w_picpathviews的長度的整數(shù)倍
viewpager.setCurrentItem(item);
//設(shè)置默認文本時第0個文本內(nèi)容
tv_title.setText(p_w_picpathDescriptions[prePosition]);
//延遲發(fā)消息,觸發(fā)上面的handler內(nèi)部類,來自動切換圖片
handler.sendEmptyMessageDelayed(0,4000);
}
/**
* 頁面滑動監(jiān)聽類
*/
class MyOnPageChangeListener implements ViewPager.OnPageChangeListener{
/**
* 頁面滾動時,回調(diào)該方法
* @param position 當前的頁面位置
* @param positionOffset 滑動了頁面的百分之多少
* @param positionOffsetPixels //屏幕上滑動了多少個像素
*/
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
/**
* 當某個頁面被選中了的時候回調(diào),即焦點圖片
* @param position 焦點圖片的位置
*/
@Override
public void onPageSelected(int position) {
int realPosition=position%(p_w_picpathviews.size()); //這是因為在下方的適配器里,把數(shù)量無限大了,左右滑動時,會超出list數(shù)組的范圍,報越界錯誤
//設(shè)置文本變化
tv_title.setText(p_w_picpathDescriptions[position]);
//把上一個高亮的為灰色,把當前的設(shè)置為紅色
ll_point_group.getChildAt(prePosition).setEnabled(false);
ll_point_group.getChildAt(position).setEnabled(true);
prePosition=position;
}
/**
* 滑動的過程中回調(diào),狀態(tài)的變化
* 靜止到滑動,滑動到靜止,靜止到拖拽
* @param state
*/
@Override
public void onPageScrollStateChanged(int state) {
}
}
class MyPagerAdapter extends PagerAdapter{
@Override
/**
* 得導(dǎo)圖片總數(shù)
*/
public int getCount() {
return Integer.MAX_VALUE; //設(shè)置無限多,方便左右無限滑動
}
/**
* 相當于getview方法,
* @param container 本質(zhì)上是viewpage人自身
* @param position 當前實例化頁面的位置
* @return
*/
@Override
public Object instantiateItem(ViewGroup container, int position) {
int realPosition=position%(p_w_picpathviews.size()); //獲取真正的位置
ImageView p_w_picpathView = p_w_picpathviews.get(position);
Log.e(TAG, "instantiateItem: 當前的位置"+position+"--------"+p_w_picpathView);
container.addView(p_w_picpathView); //添加到viewpager中
return p_w_picpathView;
}
/**
* 比較view和object是否是同一個實例
* @param view 頁面
* @param object 是上面的方法instantiateItem返回的結(jié)果
* @return
*/
@Override
public boolean isViewFromObject(View view, Object object) {
return view==object;
}
/**
* 釋放資源
* @param container 是viewpager
* @param position 要釋放的位置
* @param object 要釋放的頁面
*/
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
Log.e(TAG, "destroyItem: 釋放資源的位置"+position+"-------object");
}
}
}
本文名稱:viewpager實現(xiàn)廣告滑動及文字滑動和下方點的選中狀態(tài)改變
標題鏈接:http://chinadenli.net/article18/jggsdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、網(wǎng)站營銷、網(wǎng)站內(nèi)鏈、全網(wǎng)營銷推廣、虛擬主機、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)