Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在android中制作圆形视图寻呼机?_Android - Fatal编程技术网

如何在android中制作圆形视图寻呼机?

如何在android中制作圆形视图寻呼机?,android,Android,如何从viewpager的第0个索引跳到viewpager的最后一个索引?这就是如何使查看寻呼机循环?如果用户向左滑动,我想跳到最后一个索引;如果用户向右滑动,我想从最后一页跳到第一页 Java File package com.example.hakimi.firebasemessaging; import android.content.Intent; import android.os.Bundle; import android.support.v4.view.ViewPager;

如何从viewpager的第0个索引跳到viewpager的最后一个索引?这就是如何使查看寻呼机循环?如果用户向左滑动,我想跳到最后一个索引;如果用户向右滑动,我想从最后一页跳到第一页

Java File 
package com.example.hakimi.firebasemessaging;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

import com.eftimoff.viewpagertransformers.CubeInTransformer;
import com.eftimoff.viewpagertransformers.DefaultTransformer;
import com.eftimoff.viewpagertransformers.DrawFromBackTransformer;
import com.eftimoff.viewpagertransformers.RotateUpTransformer;
import com.eftimoff.viewpagertransformers.StackTransformer;
import com.eftimoff.viewpagertransformers.TabletTransformer;

import java.util.ArrayList;

    public class NewsCardView extends AppCompatActivity {
        private CustomPagerAdapter mCustomPagerAdapter;
        private ViewPager mViewPager;
        private ArrayList<NewsModel> arrayList = MainActivity.mArrayList;


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.news_view_activity);



            Bundle bundle = getIntent().getExtras();
            int id = bundle.getInt("id");


            mCustomPagerAdapter = new CustomPagerAdapter(this,arrayList,mViewPager);





            mViewPager = (ViewPager) findViewById(R.id.pager);
            mViewPager.setAdapter(mCustomPagerAdapter);


            mViewPager.setPageTransformer(true, new TabletTransformer());

            mViewPager.setCurrentItem(id);


            mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    if(position==mViewPager.getAdapter().getCount()-1){
                     /*   Intent reg = new
                                Intent(Illustrations.this,Register_Page.class);*/
                     //   startActivity(reg);
                    }

                }

                @Override
                public void onPageScrollStateChanged(int arg0) {
                    // TODO Auto-generated method stub

                }

                @Override
                public void onPageScrolled(int arg0, float arg1, int arg2) {
                    // TODO Auto-generated method stub

                }


            });

        }


        }


Xml file

    <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:id="@+id/relativeLayout">


        <android.support.v4.view.ViewPager
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/pager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentTop="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            >
        </android.support.v4.view.ViewPager>

    </RelativeLayout>




Adapter

    class CustomPagerAdapter extends PagerAdapter {
            Context mContext;
            LayoutInflater mLayoutInflater;


        private int[] pageIDsArray;
        private int count;


        ArrayList<NewsModel> news;


    public CustomPagerAdapter(Context context,ArrayList<NewsModel> news,final ViewPager pager) {
        this.news=news;



            mContext = context;
            mLayoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }

    @Override
    public int getCount() {
            return news.size();
            }

    @Override
    public boolean isViewFromObject(View view, Object object) {
            return view == ((LinearLayout) object);
            }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
            View itemView = mLayoutInflater.inflate(R.layout.pager_item, container, false);

            ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);
          //  imageView.setImageResource(mResources[position]);
        TextView newstitle,newsdes;

        TextView gotosrc;

        newstitle=(TextView) itemView.findViewById(R.id.pagertitle);
        newsdes=(TextView) itemView.findViewById(R.id.pagerdes);

        newsdes.setMovementMethod(new ScrollingMovementMethod());

        gotosrc=(TextView) itemView.findViewById(R.id.tvsrc);


        gotosrc.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(mContext,WebViewActivity.class);
                mContext.startActivity(intent);

            }
        });

        newstitle.setText(news.get(position).getNewsTitle());
        newsdes.setText(news.get(position).getNewsData());

        String imgurll=news.get(position).getNewsImgUrl();

        Picasso.with(mContext)
                .load(imgurll)
                .resize(300, 250)
                .centerCrop()
                .into(imageView);

            container.addView(itemView);

            return itemView;
            }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((LinearLayout) object);
            }
    }
Java文件
包com.example.hakimi.firebasemessaging;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.v4.view.ViewPager;
导入android.support.v7.app.AppActivity;
导入android.widget.Toast;
导入com.eftimoff.viewpagertransformers.CubeInTransformer;
导入com.eftimoff.viewpagertransformers.DefaultTransformer;
导入com.eftimoff.viewpagertransformers.DrawFromBackTransformer;
导入com.eftimoff.viewpagertransformers.RotateUpTransformer;
导入com.eftimoff.viewpagertransformers.StackTransformer;
导入com.eftimoff.viewpagertransformers.TabletTransformer;
导入java.util.ArrayList;
公共类NewsCardView扩展了AppCompative活动{
专用CustomPagerAdapter MCUSCompagerAdapter;
私有视图寻呼机mViewPager;
private ArrayList ArrayList=MainActivity.mArrayList;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.news\u view\u活动);
Bundle Bundle=getIntent().getExtras();
int id=bundle.getInt(“id”);
mCustomPagerAdapter=new CustomPagerAdapter(this、arrayList、mviewpage);
mViewPager=(ViewPager)findViewById(R.id.pager);
设置适配器(mCustomPagerAdapter);
setPageTransformer(true,新TabletTransformer());
mViewPager.setCurrentItem(id);
mViewPager.setOnPageChangeListener(新的ViewPager.OnPageChangeListener(){
@凌驾
已选择页面上的公共无效(内部位置){
如果(位置==mViewPager.getAdapter().getCount()-1){
/*意向注册=新
意图(插图,本,注册页,类别)*/
//星触觉(reg);
}
}
@凌驾
公共无效onPageScrollStateChanged(int arg0){
//TODO自动生成的方法存根
}
@凌驾
已滚动页面上的公共void(int arg0、float arg1、int arg2){
//TODO自动生成的方法存根
}
});
}
}
Xml文件
适配器
类CustomPagerAdapter扩展了PagerAdapter{
语境;
放平机MLAYOUTIONFLATER;
私有int[]页数组;
私人整数计数;
ArrayList新闻;
公共CustomPagerAdapter(上下文、ArrayList新闻、最终视图寻呼机){
这个。新闻=新闻;
mContext=上下文;
mLayoutInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
}
@凌驾
public int getCount(){
returnnews.size();
}
@凌驾
公共布尔值isViewFromObject(视图,对象){
返回视图==((LinearLayout)对象);
}
@凌驾
公共对象实例化项(视图组容器,int位置){
查看项目视图=MLAYOUTINGFLATER.充气(R.layout.pager_项目,容器,false);
ImageView ImageView=(ImageView)itemView.findViewById(R.id.ImageView);
//setImageResource(mResources[position]);
TextView新闻标题,newsdes;
TextView-gotosrc;
newstitle=(TextView)itemView.findViewById(R.id.pagertitle);
newsdes=(TextView)itemView.findViewById(R.id.pagerdes);
setMovementMethod(新的ScrollingMovementMethod());
gotosrc=(TextView)itemView.findviewbyd(R.id.tvsrc);
gotosrc.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(mContext、WebViewActivity.class);
mContext.startActivity(意图);
}
});
newsttitle.setText(news.get(position.getNewstTitle());
newsdes.setText(news.get(position.getNewsData());
字符串imgurl=news.get(position.getNewsImgUrl();
毕加索(McContext)
.加载(imgurll)
.调整大小(300250)
.centerCrop()
.进入(图像视图);
container.addView(itemView);
返回项目视图;
}
@凌驾
公共项(视图组容器、int位置、对象){
container.removeView((LinearLayout)对象);
}
}

以视图A、B、C为例,添加如下视图:C、A、B、C、A。然后将当前页面设置为第1页(即视图A)

当ViewPager在第0页或第4页上停止滚动时,您需要使用如下代码进行检测。如果是,则切换到另一个页面,该页面包含相同的视觉内容,但没有动画,因此更改是即时的

以下是在页面上停止滚动并切换到“相反”页面时要检测的代码:


例如,如果用户停止在第0页上滚动,则切换到第3页,这两页看起来都像“C”。它并不完美,无法处理用户试图同时滚动多个页面的情况。但这是一个可行的解决方案。

请试试这个。当然,它会像你期望的那样工作

viewPager?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
      var currentPage : Int = 0
      var mPreviousPosition : Int = 0
      var mIsEndOfCycle = false
      override fun onPageScrollStateChanged(state: Int) {
        val pageCount = viewPager?.adapter?.count
        if (state == ViewPager.SCROLL_STATE_IDLE) {
          if (mPreviousPosition == currentPage && !mIsEndOfCycle) {
            if (currentPage == 0) {
              pageCount?.minus(1)?.let { viewPager?.setCurrentItem(it, false) };
            } else {
              viewPager?.setCurrentItem(0, false);
            }
            mIsEndOfCycle = true;
          } else {
            mIsEndOfCycle = false;
          }
          mPreviousPosition = currentPage;
        }
      }

      override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}

      override fun onPageSelected(position: Int) {
        currentPage = position
      }

    })
您必须返回无限(或非常大)数量的适配器,然后在初始化页面时执行以下操作:例如,您有10项。因此,当您显示第11个(位置将为10)时,您将执行
position=position%realCount
。你的
realCount
是10,所以你得到了位置=
viewPager?.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
      var currentPage : Int = 0
      var mPreviousPosition : Int = 0
      var mIsEndOfCycle = false
      override fun onPageScrollStateChanged(state: Int) {
        val pageCount = viewPager?.adapter?.count
        if (state == ViewPager.SCROLL_STATE_IDLE) {
          if (mPreviousPosition == currentPage && !mIsEndOfCycle) {
            if (currentPage == 0) {
              pageCount?.minus(1)?.let { viewPager?.setCurrentItem(it, false) };
            } else {
              viewPager?.setCurrentItem(0, false);
            }
            mIsEndOfCycle = true;
          } else {
            mIsEndOfCycle = false;
          }
          mPreviousPosition = currentPage;
        }
      }

      override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}

      override fun onPageSelected(position: Int) {
        currentPage = position
      }

    })