viewPager自动轮播+触摸事件

本文介绍了一种基于Android的无限轮播ViewPager实现方法,通过自定义Adapter和Handler机制,配合触摸事件控制,实现了平滑过渡的广告轮播效果,并详细展示了如何通过监听器更新指示器和描述。



package com.bwei.viewpager;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;

import com.bwei.viewpager.adapter.MyPagerAdapter;
import com.bwei.viewpager.bean.ViewBean;
import com.bwei.viewpager.bean.ViewBean.Adlist;
import com.bwei.viewpager.utils.NetWorkUtils;
import com.google.gson.Gson;

public class MainActivity extends Activity {

    private List<Adlist> listData;

    private ViewPager vp;

    private TextView tv_des;

    private LinearLayout ll_dot;
    //存放的是viewPager下面的点
    List<ImageView> ivList= new ArrayList<>();
    
    
    private Handler handler = new Handler(){
        
        public void handleMessage(android.os.Message msg) {
            
            int num = msg.what;
            switch (num) {
            case 0:
                vp.setAdapter(new MyPagerAdapter(MainActivity.this,listData,handler));
                
                initDot();
                
                //设置初使化的索引
                vp.setCurrentItem(1000000);
                
                //让其无限轮播
                sendDelayedMessage();
                
                
                ViewPagerPagerListener();
                
                
                break;
                
                
            case 1:
                //拿到viewpager当前的索引值
                int position = vp.getCurrentItem();
                position++;
                
                vp.setCurrentItem(position);
                
                sendDelayedMessage();
                
                
                break;

            default:
                break;
            }
        };
    };

    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        
        vp = (ViewPager) findViewById(R.id.vp);
        tv_des = (TextView) findViewById(R.id.tv_des);
        
        ll_dot = (LinearLayout) findViewById(R.id.ll_dot);
        
        //从服务器上返回的json字符串
        
        new Thread(){
            public void run() {
                
                String json = NetWorkUtils.getStr();
                gsonData(json);
                
                handler.sendEmptyMessage(0);
                
            };
        }.start();
        
    }
    
    /**
     *
     */
    protected void sendDelayedMessage() {
        
        //延时两秒去发送一个消息给handler
        handler.sendEmptyMessageDelayed(1, 2000);
        
    }


    /**
     * viewpager滑动监听事件
     */
    
    protected void ViewPagerPagerListener() {
        vp.setOnPageChangeListener(new OnPageChangeListener() {
            
            @Override
            public void onPageSelected(int position) {
                
                for (int i = 0; i < ivList.size(); i++) {
                    if(position%listData.size()==i){
                        //viewpager的position和下面的占的位置相等,我们就让点变颜色
                        ivList.get(position%listData.size()).setImageResource(R.drawable.dot_focuse);
                        
                    }else{
                        ivList.get(i).setImageResource(R.drawable.dot_normal);
                        
                    }
                    
                    tv_des.setText(listData.get(position%listData.size()).title);
                    
                }
                
                
            }
            
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
                
            }
            
            @Override
            public void onPageScrollStateChanged(int arg0) {
                
            }
        });
        
    }

    /**
     * 初使化点
     */
    protected void initDot() {
        
        if(ivList!=null){
            ivList.clear();
        }
        
        for (int i = 0; i < listData.size(); i++) {
            
            ImageView iv = new ImageView(this);
            
            if(i==0){
                //如果
                iv.setImageResource(R.drawable.dot_focuse);
                
                
            }else{
                iv.setImageResource(R.drawable.dot_normal);
            }
            
            tv_des.setText(listData.get(i).title);
            
            LayoutParams params = new LayoutParams(20, 20);
            //控制两点之间的距离的
            params.setMargins(10, 0, 10, 0);
            
            ivList.add(iv);
            ll_dot.addView(iv, params);
            
        }
        
    }
    /**
     * 解析json数据
     */
    private void gsonData(String json) {
        Gson gson = new Gson();
        ViewBean viewBean = gson.fromJson(json, ViewBean.class);
        //存放数据的集合
        listData = viewBean.data.adlist;
        
    }

    
}

//适配器

package com.bwei.viewpager.adapter;

import java.util.List;

import android.content.Context;
import android.os.Handler;
import android.support.v4.view.PagerAdapter;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.bwei.viewpager.R;
import com.bwei.viewpager.bean.ViewBean.Adlist;
import com.nostra13.universalimageloader.core.ImageLoader;

public class MyPagerAdapter extends PagerAdapter {

    Context context;
    List<Adlist> listData;
    Handler handler;
    public MyPagerAdapter(Context context, List<Adlist> listData, Handler handler) {
        
        this.context = context;
        this.listData = listData;
        this.handler = handler;
    }

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0==arg1;
    }

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

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        
        //5 6 7 8
        //0%4  = 0
        //5%4 = 1
        View view = View.inflate(context, R.layout.vp_item, null);
        
        ImageView vp_iv = (ImageView) view.findViewById(R.id.vp_iv);
        
        vp_iv.setOnTouchListener(new OnTouchListener() {
            
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:  //手指按下的事件
                    //全部取消
                    handler.removeCallbacksAndMessages(null);
                    break;
                case MotionEvent.ACTION_UP:  //手指抬起的事件
                    handler.sendEmptyMessageDelayed(1, 2000);
                    break;
                    
                case MotionEvent.ACTION_CANCEL:  //取消的事件
                    handler.sendEmptyMessageDelayed(1, 2000);
                    break;
                
                }
                
                //true自己消费,false继续往下传
                return true;
            }
        });
        
        
        ImageLoader.getInstance().displayImage(listData.get(position%listData.size()).img, vp_iv);
        
        container.addView(view);
        
        return view;
    }
    
    
    

}


【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型与说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行与控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念与分析方法;②掌握利用Simulink进行电力系统建模与仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能与参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度与位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数——正则化参数C与核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法与机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值