引导页的圆点滑动效果

1.Activity文件

package com.example.zhihuibeijing;


import java.util.ArrayList;

import com.example.zhihuibeijing.Utils.SharePrefersUtils;


import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;




public class GuideActivity extends Activity {
    
  private static final int[] guideimage=new int[]{R.drawable.guide_1,R.drawable.guide_2,R.drawable.guide_3};
  private ViewPager vp_guide;
  int pointWidth;
  private Button btn_start;
  LinearLayout ll_point_grey;
  ArrayList<ImageView>  mimagelist;
  private View v_redPoint;
    @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_guide);
        vp_guide=(ViewPager) findViewById(R.id.vp_guide);
        ll_point_grey=(LinearLayout) findViewById(R.id.ll_point_grey);
        v_redPoint=findViewById(R.id.v_redPoint);
        btn_start=(Button) findViewById(R.id.btn_start);
        
        inivs();
        vp_guide.setAdapter(new GuideAdpter());//使用GuideAdper适配器
        vp_guide.setOnPageChangeListener(new GuidePagerListener());
        btn_start.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                //更新sp
                SharePrefersUtils.putboolean(GuideActivity.this, "guide_showed", true);
                
                startActivity(new Intent(GuideActivity.this,MainActivity.class));
            }
        });
    }
    
    
    //初始化界面
    private void inivs() {
        mimagelist=new ArrayList<ImageView>();
        for(int i=0;i<guideimage.length;i++){
            ImageView image=new ImageView(this);
            image.setBackgroundResource(guideimage[i]);//设置引导页背景资源
            mimagelist.add(image);//将背景资源放置列表中
        }
        
  //初始化引导页的圆点
        for(int i=0;i<guideimage.length;i++){
            View point=new View(this);
            point.setBackgroundResource(R.drawable.point_grey);//设置引导页圆点颜色
            
            LinearLayout.LayoutParams params=new LayoutParams(10, 10);
            if(i>0){
                params.leftMargin=10;//设置圆点间距
            }
            point.setLayoutParams(params);//设置圆点大小
            
            ll_point_grey.addView(point);//将圆点放置LinnearLayout中
        }
        
        //测量圆点距离,使用视图树的方式(因为inivs方法在oncreate中调用,layout并未绘制完成,不能直接测量圆点距离)
        ll_point_grey.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
            
            @Override
            public void onGlobalLayout() {
                System.out.println("layout已经结束");
                ll_point_grey.getViewTreeObserver().removeGlobalOnLayoutListener(this);//防止方法重复使用
                //measure(测量大小) layout(界面) ondraw(绘制)
                pointWidth=ll_point_grey.getChildAt(1).getLeft()
                        -ll_point_grey.getChildAt(0).getLeft();
                System.out.println("圆点距离:"+pointWidth);
                
            }
        });
        
    }

    //设置viewpager适配器
    class GuideAdpter extends PagerAdapter{

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

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
            return arg0==arg1;
        }
        
        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            container.addView(mimagelist.get(position));//从列表中加载view
            return mimagelist.get(position);
        }
        
        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View)object);//从列表中除去view
        }    
    }
    
    //设置viewpager滑动监听
    class GuidePagerListener implements OnPageChangeListener{

        //滑动事件
        @Override
        public void onPageScrolled(int position, float positionOffset,
                int positionOffsetPixels) {
            System.out.println("当前位置:"+position+";位置百分比:"+positionOffset
                    +";滑动距离:"+positionOffsetPixels);
            //设置小红点的相关属性(通过设置小红点的leftmargin实现小红点的移动)
            RelativeLayout.LayoutParams redparams= (RelativeLayout.LayoutParams)
                    v_redPoint.getLayoutParams();//为小红点设置布局参数
            int len=(int) (pointWidth*positionOffset+position*pointWidth);//计算小红点在随着滑动过程中该移动的距离
            redparams.leftMargin=len;
            v_redPoint.setLayoutParams(redparams);
            
        }

        //选中
        @Override
        public void onPageSelected(int position) {
            if(position==guideimage.length-1){//最后的引导页
                btn_start.setVisibility(View.VISIBLE);
            }
            else {
                btn_start.setVisibility(View.INVISIBLE);
            }
        }

        //滑动状态变化
        @Override
        public void onPageScrollStateChanged(int state) {
            // TODO Auto-generated method stub
            
        }

    

        
    }
}

2.activity_guide

<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"
   >

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

    <Button
        android:id="@+id/btn_start"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="invisible"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="70dp"
        android:background="@drawable/btn_start_selector"
        android:textColor="@drawable/btn_starttextcolor_selector"
        android:text="开始体验" />
    
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="15dp"
        >
        <LinearLayout
        android:id="@+id/ll_point_grey"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
            >
        </LinearLayout>
        <View
        android:id="@+id/v_redPoint"
        android:layout_width="10dp"
        android:layout_height="10dp"
        android:background="@drawable/point_red"   
            />
    </RelativeLayout>

</RelativeLayout>

转载于:https://www.cnblogs.com/wangying222/p/5267923.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在ECharts中,可以通过设置饼图的指示线加圆点来实现。可以使用series中的labelLine和label属性来控制引导线和圆点的样式。首先,需要设置labelLine的show属性为true,然后通过设置length和length2来控制引导线的长度。同时,可以通过设置label中的formatter属性来自定义引导线上的文字显示格式。而圆点的颜色可以通过设置itemStyle中的color属性来实现。 以下是一个示例代码,展示了如何在ECharts中实现饼图的引导线加圆点效果: ```javascript let data = [ { "name": "业务1", "value": 25 }, { "name": "业务2", "value": 10 }, { "name": "业务3", "value": 15 }, { "name": "业务4", "value": 15 }, { "name": "业务5", "value": 25 }, { "name": "业务6", "value": 10 } ]; let option = { backgroundColor: '#fff', animation: true, series: [ { name: '访问来源', type: 'pie', radius: ['50%', '70%'], avoidLabelOverlap: false, labelLine: { normal: { show: true, length: 15, length2: 110, align: 'right' }, emphasis: { show: true } }, itemStyle: { normal: { label: { show: true, formatter: [ '{a|{d}% {b}}', '{b|}' ].join('\n'), rich: { a: { left: 20, padding: [0, -100, -20, -100] }, b: { height: 5, width: 5, lineHeight: 5, marginBottom: 10, padding: [0, -5], borderRadius: 5, backgroundColor: 'red' } } } } }, data: data } ] }; ``` 通过以上代码,可以实现饼图的引导线加圆点效果。其中,引导线的长度可以通过调整length和length2来控制,圆点的颜色可以通过设置itemStyle中的backgroundColor属性来定义。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值