개발모음집

[안드로이드 프로그래밍] Day13 페이지 슬라이딩 본문

Android

[안드로이드 프로그래밍] Day13 페이지 슬라이딩

void 2016. 6. 8. 20:48

페이지 슬라이딩


MypageSliding의 MainActivity.java


package com.example.tristan91.mypagesliding;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;

public class MainActivity extends AppCompatActivity {
LinearLayout slidingPanel;
Button button;
Animation translateLeftAnim;
Animation translateRightAnim;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
translateLeftAnim = AnimationUtils.loadAnimation(this, R.anim.translate_left);
translateRightAnim = AnimationUtils.loadAnimation(this, R.anim.translate_right);

translateLeftAnim.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {

}

@Override
public void onAnimationEnd(Animation animation) {
button.setText("닫기");
}

@Override
public void onAnimationRepeat(Animation animation) {

}
});

slidingPanel = (LinearLayout) findViewById(R.id.slidingPanel);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

slidingPanel.setVisibility(View.VISIBLE);
slidingPanel.startAnimation(translateLeftAnim);
}
});
}
}
MypageSliding activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffffff00"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="바탕화면"
android:textColor="#ffffffff"
android:textSize="30dp"
/>
</LinearLayout>

<LinearLayout
android:id="@+id/slidingPanel"
android:layout_width="200dp"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#ffff00ff"
android:layout_gravity="right"
android:visibility="gone"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="슬라이딩화면"
android:textColor="#ff0000ff"
android:textSize="30dp"
/>
</LinearLayout>
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right|center_vertical"
android:text="열기"
android:textColor="#ffcccc00"
android:textSize="30dp"
/>

</FrameLayout>


MypageSliding translate_left.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

<translate
android:fromXDelta="100%p"
android:fromYDelta="0%p"
android:duration="500"
android:repeatCount="0"
android:fillAfter="true"
/>

</set>

<!--
android:fromXDelta="100%p" 뷰가 오른쪽끝에서부터
android:toXDelta="0%p" 원래의 위치까지
android:fillAfter="true" 애니메이션이후에도 계속 그 자리에 있을 건지에 대한 설정


-->

MypageSliding translate_right.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

<translate
android:fromXDelta="0%p"
android:fromYDelta="100%p"
android:duration="500"
android:repeatCount="0"
android:fillAfter="true"
/>

</set>


뷰플리퍼


뷰페이지와 함께 하나의 화면에서 여러 개의 뷰가 전환되며 보이는 대표적인 위젯



MyPage의 MainActivity.java

package com.example.tristan91.mypage;

import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {
ViewPager pager;

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

pager = (ViewPager) findViewById(R.id.pager);
MyAdapter adapter = new MyAdapter();
pager.setAdapter(adapter);
}

public void onButton1Clicked(View v) {
pager.setCurrentItem(1);
}

class MyAdapter extends PagerAdapter {
String[] name = {"소녀시대", "걸스데이", "시스타"};

@Override
public int getCount() {
return name.length; // name의 개수만큼 페이지를 생성하기위해 리턴
}

@Override
public boolean isViewFromObject(View view, Object o) {
return view.equals(o);
}

@Override
public void destroyItem(View container, int position, Object object) {
container.removeView((View) object);
}

@Override
public Object instantiateItem(View container, int position) { // position==index 인덱스에 맞는 화면생성
LinearLayout layout = new LinearLayout(getApplicationContext()); // 레이아웃을 객체화
layout.setOrientation(LinearLayout.VERTICAL);

TextView view = new TextView(getApplicationContext());
view.setText(names[position]);
view.setTextSize(40.0f);
layout.addView(view);
container.addView(layout);

return layout;
}


}
}

MyPage activity_main.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">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="두 번째 화면보기"
android:id="@+id/button"
android:layout_marginTop="41dp"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="34dp"
android:layout_marginStart="34dp"
android:onClick="onButton1Clicked" />

<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>