Ich muss einen Seitenindikator in der Ansichts-Pager-Datei mit Bildern erhalten. Hier ist mein Code.
public class IndicatorActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
MyPagerAdapter adapter = new MyPagerAdapter();
ViewPager myPager = (ViewPager) findViewById(R.id.pager);
myPager.setAdapter(adapter);
myPager.setCurrentItem(0);
TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicat);
indicator.setViewPager( myPager );
}
}
In diesem Code habe ich einen Fehler in TitlePageIndicator indicator = (TitlePageIndicator)findViewById(R.id.indicat);
als TitlePageIndicator cannot be resolved to a type
erhalten. Was ist dieser Fehler? Wie kann ich es beheben?
hier ist mein XML-Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >
<Android.support.v4.view.ViewPager
Android:id="@+id/pager"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
/>
<com.viewpagerindicator.TitlePageIndicator
Android:id="@+id/indicat"
Android:layout_height="wrap_content"
Android:layout_width="fill_parent" />
</LinearLayout>
Welchen Code muss ich in TitlePageIndicator
schreiben? Ich möchte dies ohne Fragmente tun.
Ich erstellte auch eine Klasse wie:
class MyPagerAdapter extends PagerAdapter {
private static Integer[] titles = new Integer[]
{
R.drawable.jk,R.drawable.lm,R.drawable.no
};
public int getCount() {
return 3;
}
public Object instantiateItem(View collection, int position) {
LayoutInflater inflater = (LayoutInflater) collection.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view;
ImageView iv;
view = inflater.inflate(R.layout.first, null);
((ViewPager) collection).addView(view, 0);
switch (position) {
case 0:
iv = (ImageView)view.findViewById(R.id.imageView1);
iv.setImageResource(titles[position]);
break;
case 1:
iv = (ImageView)view.findViewById(R.id.imageView1);
iv.setImageResource(titles[position]);
break;
case 2:
iv = (ImageView)view.findViewById(R.id.imageView1);
iv.setImageResource(titles[position]);
break;
}
return view;
}
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager) arg0).removeView((View) arg2);
}
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == ((View) arg1);
}
}
Wollte ich mehr als diese Klasse tun?
Vielen Dank im Voraus für die Hilfe
Hier sind einige Dinge, die Sie tun müssen:
1-Laden Sie die -Bibliothek herunter , falls Sie dies noch nicht getan haben.
2- Import in Eclipse.
3- Legen Sie Ihr Projekt für die Verwendung der Bibliothek fest: Projekt -> Eigenschaften -> Android -> Blättern Sie nach unten zum Abschnitt Bibliothek, klicken Sie auf Hinzufügen ... und wählen Sie Ansichtsanzeige.
4- Jetzt sollten Sie com.viewpagerindicator.TitlePageIndicator
importieren können.
Nun zur Implementierung ohne Fragmente:
In dem Beispiel, das mit viewpagerindicatior geliefert wird, können Sie sehen, dass die Bibliothek mit einer ViewPager
verwendet wird, die eine FragmentPagerAdapter
hat.
Tatsächlich ist die Bibliothek selbst Fragment
unabhängig. Es braucht nur eine ViewPager
. Verwenden Sie also eine PagerAdapter
anstelle einer FragmentPagerAdapter
und schon können Sie loslegen.
UPDATE: 22.03.2017
hauptfragmentlayout:
<FrameLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<Android.support.v4.view.ViewPager
Android:id="@+id/viewpager"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
<RadioGroup
Android:id="@+id/page_group"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal|bottom"
Android:layout_marginBottom="@dimen/margin_help_container"
Android:orientation="horizontal">
<RadioButton
Android:id="@+id/page1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:checked="true" />
<RadioButton
Android:id="@+id/page2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<RadioButton
Android:id="@+id/page3"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</RadioGroup>
</FrameLayout>
richten Sie Ansicht und Ereignis wie folgt auf Ihrem Fragment ein:
mViewPaper = (ViewPager) view.findViewById(R.id.viewpager);
mViewPaper.setAdapter(adapder);
mPageGroup = (RadioGroup) view.findViewById(R.id.page_group);
mPageGroup.setOnCheckedChangeListener(this);
mViewPaper.addOnPageChangeListener(this);
*************************************************
*************************************************
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
// when current page change -> update radio button state
int radioButtonId = mPageGroup.getChildAt(position).getId();
mPageGroup.check(radioButtonId);
}
@Override
public void onPageScrollStateChanged(int state) {
}
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
// when checked radio button -> update current page
RadioButton checkedRadioButton = (RadioButton)radioGroup.findViewById(checkedId);
// get index of checked radio button
int index = radioGroup.indexOfChild(checkedRadioButton);
// update current page
mViewPaper.setCurrentItem(index), true);
}
status des benutzerdefinierten Kontrollkästchens: Benutzerdefiniertes Kontrollkästchen image Android
Viewpager-Tutorial: http://architects.dzone.com/articles/Android-tutorial-using
Ich weiß, dass dies bereits beantwortet wurde, aber für jeden, der nach einer einfachen Implementierung eines ViewPager-Indikators sucht, der einfach und ohne Schnickschnack funktioniert, habe ich einen implementiert, den ich als Open Source verwendet habe. Für alle, die Jake Whartons Version für ihre Anforderungen etwas komplex finden, schauen Sie unter https://github.com/jarrodrobins/SimpleViewPagerIndicator nach.
Ich habe auch den SimpleViewPagerIndicator von @JROD verwendet. Es stürzt auch ab, wie von @manuelJ beschrieben.
Nach seiner Dokumentation:
SimpleViewPagerIndicator pageIndicator = (SimpleViewPagerIndicator) findViewById(R.id.page_indicator);
pageIndicator.setViewPager(pager);
Stellen Sie sicher, dass Sie auch diese Zeile hinzufügen:
pageIndicator.notifyDataSetChanged();
Es stürzt mit einer Ausnahme außerhalb des Bereichs ab, da SimpleViewPagerIndicator nicht ordnungsgemäß instanziiert wird und die Elemente leer sind. Das Aufrufen von notifyDataSetChanged führt dazu, dass alle Werte richtig gesetzt oder korrekt zurückgesetzt werden.
Nur eine Verbesserung der Nice-Antwort von @ vuhung3990 . Ich habe die Lösung implementiert und funktioniert großartig, aber wenn ich ein Optionsfeld berühre, wird es ausgewählt und nichts passiert.
Ich empfehle, auch die Seite zu wechseln, wenn ein Optionsfeld angetippt wird. Fügen Sie dazu einfach einen Listener zur RadioGroup hinzu:
mPager = (ViewPager) findViewById(R.id.pager);
final RadioGroup radioGroup = (RadioGroup)findViewById(R.id.radiogroup);
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.radioButton :
mPager.setCurrentItem(0, true);
break;
case R.id.radioButton2 :
mPager.setCurrentItem(1, true);
break;
case R.id.radioButton3 :
mPager.setCurrentItem(2, true);
break;
}
}
});
du musst folgendes tun:
1-Laden Sie das vollständige Projekt von hier aus herunter https://github.com/JakeWharton/ViewPagerIndicatorViewPager Indicator
Wenn Sie nach dem Importieren den folgenden Bildschirmtyp erstellen möchten, führen Sie die folgenden Schritte aus:
verändern in
Beispielkreise Standard
package com.viewpagerindicator.sample;
import Android.os.Bundle;
import Android.support.v4.view.ViewPager;
import com.viewpagerindicator.CirclePageIndicator;
public class SampleCirclesDefault extends BaseSampleActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.simple_circles);
mAdapter = new TestFragmentAdapter(getSupportFragmentManager());
mPager = (ViewPager)findViewById(R.id.pager);
// mPager.setAdapter(mAdapter);
ImageAdapter adapter = new ImageAdapter(SampleCirclesDefault.this);
mPager.setAdapter(adapter);
mIndicator = (CirclePageIndicator)findViewById(R.id.indicator);
mIndicator.setViewPager(mPager);
}
}
ImageAdapter
package com.viewpagerindicator.sample;
import Android.content.Context;
import Android.support.v4.view.PagerAdapter;
import Android.support.v4.view.ViewPager;
import Android.view.LayoutInflater;
import Android.view.View;
import Android.view.ViewGroup;
import Android.widget.ImageView;
import Android.widget.TextView;
public class ImageAdapter extends PagerAdapter {
private Context mContext;
private Integer[] mImageIds = { R.drawable.about1, R.drawable.about2,
R.drawable.about3, R.drawable.about4, R.drawable.about5,
R.drawable.about6, R.drawable.about7
};
public ImageAdapter(Context context) {
mContext = context;
}
public int getCount() {
return mImageIds.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public Object instantiateItem(ViewGroup container, final int position) {
LayoutInflater inflater = (LayoutInflater) container.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View convertView = inflater.inflate(R.layout.gallery_view, null);
ImageView view_image = (ImageView) convertView
.findViewById(R.id.view_image);
TextView description = (TextView) convertView
.findViewById(R.id.description);
view_image.setImageResource(mImageIds[position]);
view_image.setScaleType(ImageView.ScaleType.FIT_XY);
description.setText("The natural habitat of the Niligiri tahr,Rajamala Rajamala is 2695 Mts above sea level"
+ "The natural habitat of the Niligiri tahr,Rajamala Rajamala is 2695 Mts above sea level"
+ "The natural habitat of the Niligiri tahr,Rajamala Rajamala is 2695 Mts above sea level");
((ViewPager) container).addView(convertView, 0);
return convertView;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((View) object);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((ViewPager) container).removeView((ViewGroup) object);
}
}
gallery_view.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:background="@drawable/about_bg"
Android:orientation="vertical" >
<LinearLayout
Android:id="@+id/about_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical"
Android:weightSum="1" >
<LinearLayout
Android:id="@+id/about_layout1"
Android:layout_width="match_parent"
Android:layout_height="0dp"
Android:layout_weight=".4"
Android:orientation="vertical" >
<ImageView
Android:id="@+id/view_image"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@drawable/about1">
</ImageView>
</LinearLayout>
<LinearLayout
Android:id="@+id/about_layout2"
Android:layout_width="fill_parent"
Android:layout_height="0dp"
Android:layout_weight=".6"
Android:orientation="vertical" >
<TextView
Android:id="@+id/textView1"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:text="SIGNATURE LANDMARK OF MALAYSIA-SINGAPORE CAUSEWAY"
Android:textColor="#000000"
Android:gravity="center"
Android:padding="18dp"
Android:textStyle="bold"
Android:textAppearance="?android:attr/textAppearance" />
<ScrollView
Android:layout_width="fill_parent"
Android:layout_height="match_parent"
Android:fillViewport="false"
Android:orientation="vertical"
Android:scrollbars="none"
Android:layout_marginBottom="10dp"
Android:padding="10dp" >
<TextView
Android:id="@+id/description"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:textColor="#000000"
Android:text="TextView" />
</ScrollView>
</LinearLayout>
</LinearLayout>
Sie können ein lineares Layout erstellen, das ein Array von TextView (mDots) enthält. Um die Textansicht als Punkte darzustellen, stellen Sie diesen HTML-Quellcode in Ihrem Code zur Verfügung. Verweisen Sie auf meinen Code. Ich habe diese Informationen vom Youtube Channel TVAC erhalten Studio . Hier der Code: `
addDotsIndicator(0);
viewPager.addOnPageChangeListener(viewListener);
}
public void addDotsIndicator(int position)
{
mDots = new TextView[5];
mDotLayout.removeAllViews();
for (int i = 0; i<mDots.length ; i++)
{
mDots[i]=new TextView(this);
mDots[i].setText(Html.fromHtml("•")); //HTML for dots
mDots[i].setTextSize(35);
mDots[i].setTextColor(getResources().getColor(R.color.colorAccent));
mDotLayout.addView(mDots[i]);
}
if(mDots.length>0)
{
mDots[position].setTextColor(getResources().getColor(R.color.orange));
}
}
ViewPager.OnPageChangeListener viewListener = new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int
positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
addDotsIndicator(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
};`