广告轮播
接着上一次的这次演示的任然是组合已有的控件来实现新的控件
首先是效果图![]()
这是一个比较常见的效果,广告的轮播效果这里面主要的控件就是使用了Viewpage接下来看一看布局文件layout/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" tools:context=".MainActivity" > <RelativeLayout android:layout_width="match_parent" android:layout_height="160dp" > <android.support.v4.view.ViewPager android:id="@+id/main_ads_viewpage" android:layout_width="match_parent" android:layout_height="match_parent" /> <LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:padding="5dp" android:orientation="vertical" android:layout_alignParentBottom="true" android:gravity="center_horizontal" android:background="#66000000" > <TextView android:id="@+id/tv_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" android:singleLine="true" /> <LinearLayout android:id="@+id/main_llpoint_ll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:orientation="horizontal" ></LinearLayout> </LinearLayout> </RelativeLayout> </RelativeLayout>
com.example.lql.lopp.MainActivitypackage com.example.lql.lopp; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; 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 ViewPager viewPage; private int[] Color = {R.color.color1, R.color.color2,R.color.color3, R.color.color4,R.color.color5}; private List<ImageView> imageList; private LinearLayout points_ll;//points的父容器 private int PreviousPosition = 0;//记录之前的白点的位置 private boolean ISLOOPING = true; private String[] pageTitle = { "广告轮回播放页面", "广告轮回播放页面2", "广告轮回播放页面3", "广告轮回播放页面4", "广告轮回播放页面5"}; private TextView tv_pageTitle;//每一个page页的标题 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initdata(); initEvent(); initAdapter(); new Thread(){ @Override public void run() { super.run(); while(ISLOOPING){ runOnUiThread(new Runnable() { @Override public void run() { viewPage.setCurrentItem(viewPage.getCurrentItem()+1); } }); try { sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } private void initAdapter() { myAdapter adapter = new myAdapter(); viewPage.setAdapter(adapter); } private void initEvent() { viewPage.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //设置与page页相对应的点的position为白色 int NewPositon = position%imageList.size(); points_ll.getChildAt(NewPositon).setEnabled(true); //把上一个的白点变为灰点 points_ll.getChildAt(PreviousPosition).setEnabled(false); tv_pageTitle.setText(pageTitle[NewPositon]); PreviousPosition = NewPositon; } @Override public void onPageScrollStateChanged(int state) { } }); } /** * 初始化数据 */ private void initdata() { imageList = new ArrayList<>(); ImageView imageView; ImageView imagPoint; LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(15, 15);//设置宽高 for (int i = 0; i < Color.length; i++) { imageView = new ImageView(this); imagPoint = new ImageView(this); imageView.setBackgroundResource(Color[i]); imageList.add(imageView); if (i != 0) params.setMargins(15, 0, 0, 0); imagPoint.setEnabled(false);//初始化为灰点 imagPoint.setBackgroundResource(R.drawable.ablechoose); points_ll.addView(imagPoint, params); } points_ll.getChildAt(0).setEnabled(true);//初始化第一个点为白色 } private void initView() { tv_pageTitle = (TextView) findViewById(R.id.tv_desc); viewPage = (ViewPager) findViewById(R.id.main_ads_viewpage); points_ll = (LinearLayout) findViewById(R.id.main_llpoint_ll); } /** * ViewPage的数据与Listview一样来自于Adapter */ private class myAdapter extends PagerAdapter { /** * @param container * @param position * @return 返回相应的View 实例化当前的View,添加到contrainer中,然后返回生成的View或关联的Object (用于在isViewFromObject中检查) */ @Override public Object instantiateItem(ViewGroup container, int position) { int NewPosition = position%imageList.size(); ImageView imageView = imageList.get(NewPosition); container.addView(imageView); return imageView; } /** * @param container * @param position * @param object * 从container中移除指定的View (释放内存) */ @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } } @Override protected void onDestroy() { super.onDestroy(); ISLOOPING = false; } }
自定义控件(二)--广告轮播
最新推荐文章于 2023-12-13 08:36:02 发布