안녕하세요 알통몬입니다. 공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
2017/05/16 - [안드로이드] - 안드로이드 애니메이션 Animation x,y 좌표 이동 애니메이션과 애니메이션 후 위치(좌표) 고정
지난 포스팅에서 x,y좌표이동 애니메이션에 대해 공부했는데요.
지난 포스팅에서 말씀드린대로 애니메이션을 이용해 ListView의 아이템을 클릭했을 때 스와이프 애니메이션처럼 구현하는 방법에 대해 포스팅하겠습니다.
먼저 동작 영상입니다.
필요한 클래스 및 xml
1. Item.java
리스트 뷰의 아이템이 될 클래스입니다.
package example.semiswipe; public class Item { private String front; private String back; public Item(String front, String back) { this.front = front; this.back = back; } public String getFront() { return front; } public String getBack() { return back; } } |
2. item.xml
리스트 뷰의 아이템이 될 뷰입니다.
FrameLayout 안에 먼저 보여질 아이템과 숨겨진 아이템을 놓았습니다.
<?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="60dp"> <LinearLayout android:background="#c9c9c9" android:visibility="gone" android:id="@+id/backLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/backTv" android:textColor="#000000" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="뒤에 숨어있는 아이템"/> </LinearLayout> <LinearLayout android:background="#FFFFFF" android:id="@+id/frontLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <TextView android:id="@+id/frontTv" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:text="첨에 보여지는 아이템"/> </LinearLayout> </FrameLayout> |
3. ItemAdapter.java
package example.semiswipe; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; /** * Created by 15U560 on 2017-05-18. */ public class ItemAdapter extends BaseAdapter { ArrayList<Item> items; LayoutInflater inflater; public ItemAdapter(ArrayList<Item> items, LayoutInflater inflater) { this.items = items; this.inflater = inflater; } @Override public int getCount() { return items.size(); } @Override public Object getItem(int position) { return items.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if (convertView == null) { convertView = inflater.inflate(R.layout.item, parent, false); viewHolder = new ViewHolder(); viewHolder.frontTv = (TextView) convertView.findViewById(R.id.frontTv); viewHolder.backTv = (TextView) convertView.findViewById(R.id.backTv); viewHolder.backLayout = (LinearLayout) convertView.findViewById(R.id.backLayout); viewHolder.frontLayout = (LinearLayout) convertView.findViewById(R.id.frontLayout); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder)convertView.getTag(); } viewHolder.frontTv.setText(items.get(position).getFront()); viewHolder.backTv.setText(items.get(position).getBack()); viewHolder.backLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MainActivity.translateAnim(-1f,0,0,0,500,viewHolder.frontLayout); viewHolder.backLayout.setVisibility(View.GONE); x,y 좌표 이동 애니메이션 } }); return convertView; } private class ViewHolder { // 뷰홀더 패턴 사용 TextView frontTv; TextView backTv; LinearLayout backLayout; LinearLayout frontLayout; } } |
4. MainActivity.java
package example.semiswipe; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.animation.Animation; import android.view.animation.TranslateAnimation; import android.widget.AdapterView; import android.widget.LinearLayout; import android.widget.ListView; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { private ListView semiSwipeLv; private ArrayList<Item> items; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); semiSwipeLv = (ListView) findViewById(R.id.semiSwipeLv); items = new ArrayList<>(); for(int i = 0; i<10; i++) { items.add(new Item("첨에 보여지는 아이템("+i+")","숨어있는 아이템("+i+")")); } ItemAdapter adapter = new ItemAdapter(items, getLayoutInflater()); semiSwipeLv.setAdapter(adapter); semiSwipeLv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { LinearLayout frontLayout = (LinearLayout) view.findViewById(R.id.frontLayout); LinearLayout backLayout = (LinearLayout) view.findViewById(R.id.backLayout); translateAnim(0,-1f,0,0,500,frontLayout); backLayout.setVisibility(View.VISIBLE); } }); } public static void translateAnim(float xStart, float xEnd, float yStart, float yEnd, int duration, LinearLayout layout) { TranslateAnimation translateAnimation = new TranslateAnimation( Animation.RELATIVE_TO_SELF,xStart, Animation.RELATIVE_TO_SELF, xEnd, Animation.RELATIVE_TO_SELF,yStart, Animation.RELATIVE_TO_SELF,yEnd); translateAnimation.setDuration(duration); translateAnimation.setFillAfter(true); layout.startAnimation(translateAnimation); } } |
5. activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="example.semiswipe.MainActivity"> <ListView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/semiSwipeLv"/> </LinearLayout> |
위에 언급한 파일들입니다.
필요하신 분들은 가져다가 사용하시면 됩니다~
더 좋고 유익한 포스팅으로 돌아오겠습니다 ㅎㅎ
이상입니다.
'안드로이드' 카테고리의 다른 글
안드로이드 리플 효과 만들기, android ripple effect (0) | 2017.05.23 |
---|---|
안드로이드 다이얼로그 타이틀 없애기 , 액티비티 EditText 포커스 없애기 (0) | 2017.05.23 |
안드로이드 애니메이션 Animation x,y 좌표 이동 애니메이션과 애니메이션 후 위치(좌표) 고정 (0) | 2017.05.16 |
jsp 에서 android로 FCM 메시지 보내는 방법. jsp 에서 안드로이드로 FCM NOtification 보내기 (8) | 2017.05.13 |
안드로이드 softKeyboard 소프트 키보드 올라왔을 때와 내려왔을 때 이벤트 처리 onSoftKeyboardHide(), onSoftKeyboardShow() (1) | 2017.05.13 |