Android 는 ViewPager 를 이용 하여 작은 둥 근 공 을 가 진 그림 이 미 끄 러 집 니 다.
지금도 뷰 패 거 를 이용 하고 있 지만,쉐 이 프 드 라 와 블 을 이용 해 작은 둥 근 공 을 가 진 그림 이 미 끄 러 지 는 것 은 아니다.일부 플레이어 처럼 app 을 설치 하기 시작 할 때 안내 인터페이스 가 나타 나 고 메 인 인터페이스 에 들 어가 지만 app 을 다시 시작 할 때 이 안내 인터페이스 가 나타 나 지 않 습 니 다.
아래 에 실 현 된 것 은 바로 이 유사 한 기능 이다.안내 화면 을 모두 그림 으로 표시 하면 서로 다른 방법(이전 블 로그 와)을 나 타 낼 수 있다.
이 예 는 주로 작은 원점 의 그리 기 와 viewpager 가 연결 되 어 있 습 니 다.
다음 효과:
MyPagerAdapter 는 어댑터 를 만 드 는 데 사 용 됩 니 다.
MyPagerAdapter.java :
package com.android.circleforimage;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
public class MyPagerAdapter extends FragmentPagerAdapter {
private static Activity activity;
private static final int[] IMAGES = { R.drawable.x01, R.drawable.x02,
R.drawable.x03, R.drawable.x04, R.drawable.x05 };
public static int sum = IMAGES.length;
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
/**
* MainActivity activity
*/
public void setForActivity(Activity activity) {
this.activity = activity;
}
public Activity getForActivity() {
return activity;
}
@Override
public int getCount() {
return IMAGES.length;
}
@Override
public Fragment getItem(final int position) {
return MyFragment.newInstance(position);
}
public static class MyFragment extends Fragment {
private int mBaseIndex;
// Fragment
static MyFragment newInstance(int baseIndex) {
MyFragment fragment = new MyFragment();
fragment.setBaseIndex(baseIndex);
return fragment;
}
public MyFragment() {
super();
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// button
if (getBaseIndex() == IMAGES.length - 1) {
return initForButton(inflater);
} else {
return showImages(inflater);
}
}
/**
* ,
*/
public void setBaseIndex(int index) {
mBaseIndex = index;
}
/**
* ,
*/
public int getBaseIndex() {
return mBaseIndex;
}
public View initForButton(LayoutInflater inflater){
View view = inflater.inflate(R.layout.item_two, null);
Button button = (Button) view.findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(activity,
SecondActivity.class);
startActivity(intent);
activity.finish();
}
});
return view;
}
public View showImages(LayoutInflater inflater){
View view = inflater.inflate(R.layout.item_one, null);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
imageView.setImageResource(IMAGES[getBaseIndex()]);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
return view;
}
}
}
Circle 클래스 는 작은 둥 근 공 을 그립 니 다:Circle.java :
package com.android.circleforimage;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
public class Circle extends View {
private Paint paint;
private int radius = 16;
//
private int count = MyPagerAdapter.sum;
//
private int choosePosition = 0;
//
private int gap = 70;
/**
*
*/
public void choose(int pos) {
choosePosition = pos;
//
this.invalidate();
}
public Circle(Context context) {
this(context, null);
}
public Circle(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public Circle(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint = new Paint();
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int width = getWidth();
int height = getHeight();
// ,
int startPx = (width - (count - 1) * gap) / 2;
for (int i = 0; i < count; i++) {
if (choosePosition == i) {
paint.setColor(Color.RED);
canvas.drawCircle(startPx + i * gap, height - 50, radius + 4,
paint);
} else {
paint.setColor(Color.WHITE);
canvas.drawCircle(startPx + i * gap, height - 50, radius, paint);
}
}
}
}
MainActivity.java :
package com.android.circleforimage;
import com.android.circleforimageutils.Words;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends FragmentActivity {
private ViewPager viewPager;
private MyPagerAdapter mAdapter;
private Circle circle;
private Activity activity = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initActivity();
setContentView(R.layout.activity_main);
activity = this;
showForSecondActivity();
viewPager = (ViewPager) findViewById(R.id.viewPager);
circle = (Circle) findViewById(R.id.circle);
scrollPager();
mAdapter = new MyPagerAdapter(getSupportFragmentManager());
/* MyPagerAdapter */
mAdapter.setForActivity(activity);
viewPager.setAdapter(mAdapter);
}
/**
*
*/
private void initActivity() {
//
requestWindowFeature(Window.FEATURE_NO_TITLE);
//
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
/**
* , , ,
*/
private void showForSecondActivity() {
// PreferenceManager:Used to help create Preference hierarchies from activities or XML.
SharedPreferences mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mSharedPreferences.edit();
boolean b = mSharedPreferences.getBoolean(Words.KEY_ONE, true);
if (b) {
editor.putBoolean(Words.KEY_ONE, false);
editor.commit();
} else {
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
finish();
}
}
/**
* viewPager , Circle
*/
private void scrollPager() {
viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
circle.choose(position);
}
});
}
}
또 하나의 가방 에 저장 되 지 않 고 상수 클래스 Words 를 새로 만 듭 니 다.Words.java :
package com.android.circleforimageutils;
public class Words {
public static String KEY_ONE = "key_for_main";
}
SecondActivity.java :
package com.android.circleforimage;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TextView;
public class SecondActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText(" :
http://blog.csdn.net/antimage08");
textView.setTextSize(25);
textView.setTextColor(Color.BLUE);
textView.setGravity(Gravity.CENTER);
setContentView(textView);
}
}
activity_main.xml(일반적인 상황 에서 viewpager 가 인터페이스 에서 비교적 적은 구성 요소 와 함께 있 을 때 효과 가 본 사례 와 비슷 할 때 FrameLayout 를 선택 할 수 있 습 니 다):
<FrameLayout 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:orientation="vertical"
tools:context="com.android.circleforimage.MainActivity" >
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<com.android.circleforimage.Circle
android:id="@+id/circle"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
item_one.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
item_to.xml(ImageView 에서 src 는 button 단추 가 있 을 때 그림 이 표시 되 어야 불 러 옵 니 다.코드 에 button 단추 인터페이스 가 있 을 때의 그림 을 추가 하지 않 았 습 니 다) :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/x05"/>
<Button
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text=" "
android:textSize="20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
마지막 으로 AndroidManifest.xml 에서 SecondActivity 에 등록 하 는 것 을 잊 지 마 세 요.이 종 류 를 만 들 기 전에 등록 하 는 것 이 좋 습 니 다.이렇게 하면 잊 기 쉽 지 않 습 니 다.
<activity android:name=".SecondActivity" />
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.