自定义view—— 广告条效果

来源:互联网 发布:淘宝退货怎么说 编辑:程序博客网 时间:2024/06/05 07:18

效果图


布局activi_mian:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width= "fill_parent"
    android:layout_height= "150dp" >


    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </android.support.v4.view.ViewPager >


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#44000000"
        android:orientation="vertical"
        android:layout_alignParentBottom ="true"
        android:padding="5dp" >


        <TextView
            android:id="@+id/tv_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="广告条效果"
            android:padding="5dp"
            android:textColor="#ffffffff" />


        <LinearLayout
            android:id="@+id/ll_point"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
             android:layout_gravity="center" >
        </LinearLayout>
    </LinearLayout >


</RelativeLayout>


被选中的时候按钮:

<?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="#ff0000"/>
</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>


MainActivity主界面功能:

/**
 * 广告条效果
 *
 * @author 周成东
 *
 */


public class MainActivity extends Activity {
    private ViewPager pager;
    private TextView tv_title;
    private LinearLayout ll_point;
    private int[] ids = { R.drawable.a, R.drawable.b, R.drawable.c,
           R.drawable. d, R.drawable. e };
    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            switch (msg.what ) {
            case 0:
                int item = pager.getCurrentItem() + 1;
                pager.setCurrentItem(item);
                handler.sendEmptyMessageDelayed(0, 3000);
                break;


            default:
                break;
           }
       };
    };
    /**
     * 上一次高亮显示的位置
     */
    private int prePosition = 0;
    private List<ImageView> imageViews = new ArrayList<ImageView>();
    // 图片标题集合
    private final String[] imageDescriptions = { "尚硅谷波河争霸赛!" , "凝聚你我,放飞梦想!" ,
            "抱歉没座位了!" , "7月就业名单全部曝光!" , "平均起薪11345元" };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout. activity_main);
       initView();
       getData();
       setListener();


        pager.setAdapter( new PagerAdapter() {
            @Override
            public boolean isViewFromObject(View arg0, Object arg1) {
                // TODO Auto-generated method stub
                return arg0 == arg1;
           }


            @Override
            public int getCount() {
                // TODO Auto-generated method stub
                return Integer.MAX_VALUE ;
           }


            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                final int relposition = position % imageViews.size();
                final ImageView imageView = imageViews.get(relposition);
               container.addView(imageView);
                // imageview 触摸事件
               imageView.setOnTouchListener( new OnTouchListener() {


                   @Override
                   public boolean onTouch(View v, MotionEvent event) {
                       // 不会调用MotionEvent.ACTION_MOVE
                       if (event.getAction() == MotionEvent.ACTION_DOWN ) {
                           handler.removeCallbacksAndMessages( null);
                      } else if (event.getAction() == MotionEvent.ACTION_UP ) {
                           handler.removeCallbacksAndMessages( null);
                           handler.sendEmptyMessageDelayed(0, 3000);
                      }
                       return false ;
                  }
               });
               //就是当多个ImageView用到一个监听器时,能触发不同的情况
               imageView.setTag(relposition);
               imageView.setOnClickListener( new OnClickListener() {
                  
                   @Override
                   public void onClick(View v) {
                       int position=(Integer) imageView.getTag();
                      String text=imageDescriptions[position];
                      Toast. makeText(getApplicationContext(), text, Toast.LENGTH_LONG ).show();
                  }
               });
                return imageView;
           }


            @Override
            public void destroyItem(ViewGroup container, int position,
                  Object object) {
               container.removeView((View) object);
           }


       });
        // 设置中间位置
        int item = Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2
               % imageViews.size();
        pager.setCurrentItem(item);
        handler.sendEmptyMessageDelayed(0, 3000);
    }


    private void setListener() {
        pager.setOnPageChangeListener( new OnPageChangeListener() {


            private boolean isDragging ;


            @Override
            public void onPageSelected(int position) {
            //进行循环,真实的位置
                int relposition = position % imageViews.size();
                tv_title.setText( imageDescriptions[relposition]);
                // 设置前一个为灰点
                ll_point.getChildAt( prePosition).setEnabled(false);
                ll_point.getChildAt(relposition).setEnabled( true);
                prePosition = relposition;


           }


            @Override
            public void onPageScrolled(int position, float positionOffset,
                   int positionOffsetPixels) {
           }
            @Override
            public void onPageScrollStateChanged(int state) {
                if (state == ViewPager.SCROLL_STATE_DRAGGING ) {
                    handler.removeCallbacksAndMessages( null);
                   isDragging = true ;
               } else if (state == ViewPager.SCROLL_STATE_SETTLING ) {


               } else if (state == ViewPager.SCROLL_STATE_IDLE && isDragging) {
                   isDragging = false ;
                    handler.removeCallbacksAndMessages( null);
                    handler.sendEmptyMessageDelayed(0, 3000);
               }


           }
       });
    }

    private void getData() {
        for (int i = 0; i < ids.length; i++) {
            /**
            * 设置图片
            */
           ImageView imageView = new ImageView(this);
           imageView.setBackgroundResource( ids[i]);
            imageViews.add(imageView);
            /**
            * 获取点
            */
           ImageView point = new ImageView(this);
           point.setBackgroundResource(R.drawable. point_selector);
           LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8,
                  8);
            if (i == 0) {
               point.setEnabled( true);
           } else {
               point.setEnabled( false);
               params. leftMargin = 8;
           }
           point.setLayoutParams(params);
            ll_point.addView(point);
       }


    }


    private void initView() {
        pager = (ViewPager) findViewById(R.id.viewpager );
        tv_title = (TextView) findViewById(R.id.tv_title );
        ll_point = (LinearLayout) findViewById(R.id.ll_point );
    }


}

原创粉丝点击