如何在android中制作圆形视图寻呼机?
如何从viewpager的第0个索引跳到viewpager的最后一个索引?这就是如何使查看寻呼机循环?如果用户向左滑动,我想跳到最后一个索引;如果用户向右滑动,我想从最后一页跳到第一页如何在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;
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
}
})