Android UI 디자인 및 개발 의 ViewPager 모방 위 챗 안내 인터페이스 및 애니메이션 효과
이 편 지 는 위 챗 을 모방 한 애니메이션 효과 입 니 다.비록 이런 효과 의 실현 은 인터넷 곳곳에 있 지만 저 는 중 저급 개발 자의 입장 에서 여러분 에 게 어떻게 실현 되 었 는 지 알려 드 리 고 싶 습 니 다.물론 실현 하 는 방식 이 많 습 니 다.저 는 제 가 실현 하기에 비교적 편리 하 다 고 생각 하 는 방법 을 제 시 했 을 뿐 입 니 다.여러분 들 이 사용 하 시기 바 랍 니 다.
1.실현 효과 도
그림 이 있어 야 진실 이 있다.위의 그림 에서 먼저:
단 추 를 누 르 면 애니메이션 효과 가 나타 나 고 다른 화면 으로 들 어 갑 니 다.
2.프로그램의 디 렉 터 리 구조
3.구체 적 인 코딩 실현
1、 주 레이아웃 인터페이스 에 ViewPager 구성 요소 와 아래쪽 의 작은 점,activity 를 추가 합 니 다.main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<LinearLayout
android:id="@+id/ll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="24.0dip"
android:orientation="horizontal" >
<ImageView
android:id="@+id/page0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="5dip"
android:src="@drawable/page_indicator_focused" />
<ImageView
android:id="@+id/page1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="5dip"
android:src="@drawable/page_indicator_unfocused" />
<ImageView
android:id="@+id/page2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="5dip"
android:src="@drawable/page_indicator_unfocused" />
<ImageView
android:id="@+id/page3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="5dip"
android:src="@drawable/page_indicator_unfocused" />
<ImageView
android:id="@+id/page4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="5dip"
android:src="@drawable/page_indicator_unfocused" />
<ImageView
android:id="@+id/page5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:clickable="true"
android:padding="5dip"
android:src="@drawable/page_indicator_unfocused" />
</LinearLayout>
</RelativeLayout>
2、이어서 guideview 01.xml 등 몇 개의 레이아웃 페이지 에 안내 인터페이스 에 표시 할 그림 과 컨트롤 을 추가 합 니 다.이 몇 개의 레이아웃 인터페이스 가 모두 대동소이 하기 때문에 여기 서 일일이 붙 이지 않 겠 습 니 다.필요 한 학생 이 있 으 면 원본 코드 를 직접 다운로드 할 수 있 습 니 다.guideview01.xml:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/w01"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="35dp"
android:gravity="center"
android:text="@string/guide_text01"
android:textColor="@color/TextColor"
android:textSize="22sp" />
</RelativeLayout>
3.그 다음 에 애니메이션 효 과 를 실현 하 는 레이아웃 인터페이스,guidedoor.xml:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/imageLeft"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentLeft="true"
android:scaleType="fitXY"
android:src="@drawable/w_left" />
<ImageView
android:id="@+id/imageRight"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentRight="true"
android:scaleType="fitXY"
android:src="@drawable/w_right"
android:visibility="visible" />
<TextView
android:id="@+id/anim_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="35dp"
android:gravity="center"
android:text="
,
"
android:textColor="#fff"
android:textSize="22sp" />
</RelativeLayout>
4.마지막 으로 애니메이션 효 과 를 완성 한 후에 들 어 가 는 레이아웃 인터페이스,activityother.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:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" , !" />
</LinearLayout>
5.여기 서 xml 파일 을 만들어 서 사용자 정의 단추 의 효 과 를 실현 해 야 합 니 다.사용자 정의 단추 의 효과 실현 에 대해 저 는 뒤의 글 에서 자세히 소개 하 겠 습 니 다.여 기 는 군말 이 아 닙 니 다.startweixin_btn.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_pressed="true"
android:drawable="@drawable/whatsnew_btn_pressed" /> <!-- -->
<item android:state_enabled="true" android:drawable="@drawable/whatsnew_btn_nor" /> <!-- -->
</selector>
6.레이아웃 인터페이스 에 대한 설명 이 끝 났 습 니 다.다음 에 상세 한 코드 설명 을 하 겠 습 니 다.ViewPager 어댑터 코드,ViewPager Adapter.java:
package com.yangyu.myguideview02;
import java.util.ArrayList;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.View;
/**
* @author yangyu
* :ViewPager , view
*/
public class ViewPagerAdapter extends PagerAdapter {
//
private ArrayList<View> views;
public ViewPagerAdapter (ArrayList<View> views){
this.views = views;
}
/**
*
*/
@Override
public int getCount() {
if (views != null) {
return views.size();
}
return 0;
}
/**
* position
*/
@Override
public Object instantiateItem(View view, int position) {
((ViewPager) view).addView(views.get(position), 0);
return views.get(position);
}
/**
*
*/
@Override
public boolean isViewFromObject(View view, Object arg1) {
return (view == arg1);
}
/**
* position
*/
@Override
public void destroyItem(View view, int position, Object arg2) {
((ViewPager) view).removeView(views.get(position));
}
}
7.주 프로그램 입구 activity 클래스,MainActivity.java:
package com.yangyu.myguideview02;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
/**
* @author yangyu
* : activity
*/
public class MainActivity extends Activity {
// ViewPager
private ViewPager viewPager;
// ViewPager
private ViewPagerAdapter vpAdapter;
// ArrayList View
private ArrayList<View> views;
// View
private View view1,view2,view3,view4,view5,view6;
//
private ImageView pointImage0, pointImage1, pointImage2, pointImage3,pointImage4, pointImage5;
//
private Button startBt;
//
private int currIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initData();
}
/**
*
*/
private void initView() {
//
LayoutInflater mLi = LayoutInflater.from(this);
view1 = mLi.inflate(R.layout.guide_view01, null);
view2 = mLi.inflate(R.layout.guide_view02, null);
view3 = mLi.inflate(R.layout.guide_view03, null);
view4 = mLi.inflate(R.layout.guide_view04, null);
view5 = mLi.inflate(R.layout.guide_view05, null);
view6 = mLi.inflate(R.layout.guide_view06, null);
// ViewPager
viewPager = (ViewPager) findViewById(R.id.viewpager);
// ArrayList
views = new ArrayList<View>();
// ViewPager
vpAdapter = new ViewPagerAdapter(views);
//
pointImage0 = (ImageView) findViewById(R.id.page0);
pointImage1 = (ImageView) findViewById(R.id.page1);
pointImage2 = (ImageView) findViewById(R.id.page2);
pointImage3 = (ImageView) findViewById(R.id.page3);
pointImage4 = (ImageView) findViewById(R.id.page4);
pointImage5 = (ImageView) findViewById(R.id.page5);
//
startBt = (Button) view6.findViewById(R.id.startBtn);
}
/**
*
*/
private void initData() {
//
viewPager.setOnPageChangeListener(new MyOnPageChangeListener());
//
viewPager.setAdapter(vpAdapter);
// View
views.add(view1);
views.add(view2);
views.add(view3);
views.add(view4);
views.add(view5);
views.add(view6);
//
startBt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
startbutton();
}
});
}
public class MyOnPageChangeListener implements OnPageChangeListener {
@Override
public void onPageSelected(int position) {
switch (position) {
case 0:
pointImage0.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
pointImage1.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
break;
case 1:
pointImage1.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
pointImage0.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
pointImage2.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
break;
case 2:
pointImage2.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
pointImage1.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
pointImage3.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
break;
case 3:
pointImage3.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
pointImage4.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
pointImage2.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
break;
case 4:
pointImage4.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
pointImage3.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
pointImage5.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
break;
case 5:
pointImage5.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_focused));
pointImage4.setImageDrawable(getResources().getDrawable(R.drawable.page_indicator_unfocused));
break;
}
currIndex = position;
// animation.setFillAfter(true);// True:
// animation.setDuration(300);
// mPageImg.startAnimation(animation);
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
}
/**
*
*/
private void startbutton() {
Intent intent = new Intent();
intent.setClass(MainActivity.this,GuideViewDoor.class);
startActivity(intent);
this.finish();
}
}
PS:이 코드 에서 주의해 야 할 부분 이 있 습 니 다.비록 우리 가 코드 를 쓸 때 항상 조 심 스 러 웠 지만 저급한 오 류 를 범 하 는 것 을 피 할 수 없어 서 디 버 깅 에 시간 이 지체 되 었 습 니 다.
//
startBt = (Button) view6.findViewById(R.id.startBtn);
이것 은 마지막 레이아웃 인터페이스의 시작 단추 입 니 다.findviewById()방법 앞에서 view 6 를 사용 하여 이 방법 을 호출 하 는 것 을 잊 어 버 려 서 시 뮬 레이 터 가 빈 포인터 이상 을 알 렸 습 니 다.8.애니메이션 효 과 를 실현 하 는 입구 activity 류 는 이런 유형 에서 시작 단 추 를 클릭 한 후에 하나의 애니메이션 효 과 를 실현 하여 다른 화면 에 들 어 가 는 목적 을 달성 했다.이런 유형 에서 주로 애니메이션 류 를 사용 했다.저 는 뒤의 장 에서 주제 의 형식 으로 애니메이션 이라는 유형 을 소개 할 것 입 니 다.그래서 여기 서도 더 이상 군말 하지 않 겠 습 니 다.
GuideViewDoor.Java:
package com.yangyu.myguideview02;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.TextView;
/**
* @author yangyu
* : activity
*/
public class GuideViewDoor extends Activity {
//
private ImageView mLeft,mRight;
//
private TextView mText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide_door);
//
mLeft = (ImageView)findViewById(R.id.imageLeft);
mRight = (ImageView)findViewById(R.id.imageRight);
mText = (TextView)findViewById(R.id.anim_text);
//
AnimationSet anim = new AnimationSet(true);
//
TranslateAnimation mytranslateanim = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,-1f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0f);
//
mytranslateanim.setDuration(2000);
//
anim.setStartOffset(800);
//
anim.addAnimation(mytranslateanim);
// ,
anim.setFillAfter(true);
//
mLeft.startAnimation(anim);
AnimationSet anim1 = new AnimationSet(true);
TranslateAnimation mytranslateanim1 = new TranslateAnimation(Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,+1f,Animation.RELATIVE_TO_SELF,0f,Animation.RELATIVE_TO_SELF,0f);
mytranslateanim1.setDuration(1500);
anim1.addAnimation(mytranslateanim1);
anim1.setStartOffset(800);
anim1.setFillAfter(true);
mRight.startAnimation(anim1);
AnimationSet anim2 = new AnimationSet(true);
ScaleAnimation myscaleanim = new ScaleAnimation(1f,3f,1f,3f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
myscaleanim.setDuration(1000);
AlphaAnimation myalphaanim = new AlphaAnimation(1,0.0001f);
myalphaanim.setDuration(1500);
anim2.addAnimation(myscaleanim);
anim2.addAnimation(myalphaanim);
anim2.setFillAfter(true);
mText.startAnimation(anim2);
new Handler().postDelayed(new Runnable(){
@Override
public void run(){
Intent intent = new Intent (GuideViewDoor.this,OtherActivity.class);
startActivity(intent);
GuideViewDoor.this.finish();
}
}, 2300);
}
}
9.마지막 으로 다른 activity 클래스 입 니 다.저 는 다른 인터페이스 에 들 어 가 는 이런 효 과 를 얻 기 위해 코드 가 비교적 간단 합 니 다.바로 layot 레이아웃 페이지,OtherActivity.java 를 호출 한 것 입 니 다.
package com.yangyu.myguideview02;
import android.app.Activity;
import android.os.Bundle;
/**
* @author yangyu
* : activity
*/
public class OtherActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
}
}
10.마지막 으로 AndroidManifest.xml 목록 파일 에 GuideView Door,Other Activity 라 는 두 개의 activity 를 추가 하 는 것 을 잊 지 마 세 요.그렇지 않 으 면 이상 이 발생 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ViewPager와 PagerAdapter를 사용하여 슬라이딩 뷰 만들기ViewPager와 PagerAdapter를 사용하여 오른쪽으로 왼쪽으로 이동하는 뷰 연습입니다. Tab 마이그레이션도 포함되었습니다. 아주 간단해요.쥐부터 멧돼지까지 끝. 숫자의 표시가 붕괴된 것을 용서해 주십시오...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.