自定义公告,实现垂直方向轮播
- MainActivity(显示公告的activity,自己根据需要显示位置选择)
- viewFilpers(自定义viewFilper)
- 布局文件
- 动画
MainActivty:
public class MainActivity extends AppCompatActivity implements ViewFilpers.CallBack {
privte Context con;
private List<String>names;
private ViewFilpers viewFilpers;
private void onCreat(Bundle savedInstanceState){
setContentView(R.layout.ay_view_filper); viewFilpers = (ViewFilpers) findViewById(R.id.the_viewfilper); con=this; names =new ArrayList(); names.add("name1"); names.add("name2"); names.add(name3"); names.add("name4"); names.add("name5"); initViewFilp(); } private void initViewFilp(){ viewFilpers.addViewFlipper(con, mList); viewFilpers.setInterval(2000); viewFilpers.startFlipping(); viewFilpers.setCallBack(this); } @override private void itemClick(int position){ Toast.makeTost(con,"刚刚点击了公告的item",Toast.LENGTH_SHORT).show(); } }
//主MainActivity结束
//自定义viewFilpers开始(重点)
ViewFilpers
public class ViewFilpers extends ViewFlipper implements View.OnClickListener{
private CallBcak callBack;
private Context con;
//实现两个构造方法
public ViewFilpers(Context context) { super(context); init(context); } public ViewFilpers(Context context, AttributeSet attrs) { super(context, attrs); init(context); }
/**
主要用于对ViewFilper进行一些边距和动画的设置
*/
private void init(Context context){
this.con = context;
setPadding(dp2px(10),dp2px(2),dp2px(10),dp2px(2));//从左到下的内边距,顺时针方向
setinAnimation(AnimationUtils.loadAnimation(context,R.anim.anim_come_in));//从下 进入时动画 setOutAnimation(AnimationUtils.loadAnimation(context, R.anim.anim_get_out));//从上 出去时动画 } //重点方法 public void addViewFlipper(Context con ,List<String> mlist){ for(int i=0;i<mlist.size;i++){ TextView textView =new TextView(con); textView.setGravity(Gravity.CENTER_VERTICAL) textView.setText(mlist.get(i)) textView.setTextColor(getResource().getColor(R.color.black)); textView.setTextSize(15); textView.setEllipsize(TextUtils.TruncateAt.END)//省略号用在末尾 textView.setTag(i)//为了给点击事件一个position。如果用不到点击事件这个可以忽略 textView.setOnClickListener(this); ViewFilpers.this.setView(textView,LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT) } }
//此方法用于设置自定义的公告间隔时间
public void setInterval(int time){
setFlipInterval(time);
}
@Override public void onClick(View view) { callBack.itemClick((Integer) view.getTag()); }
public interface CallBack{ void itemClick(int position); } //setPadding()方法中用到的px,所以必须写一个转换 private void dp2px(){ return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpValue,con.getResources().getDisplayMetrics()); } } //自定义viewFilpers 结束 布局文件:ay_view_filper.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:background="@drawable/sp_selorder" android:orientation="vertical"> <RelativeLayout android:id="@+id/rl_viewfilper" android:layout_width="match_parent" android:layout_height="45dp" android:background="@drawable/recycler_item_selector"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="轮播图" /> </RelativeLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="45dp" android:background="@drawable/recycler_item_selector"></RelativeLayout> <zhang.guo.qiang.viewfilpers.ViewFilpers android:id="@+id/the_viewfilper" android:layout_width="match_parent" android:layout_height="45dp" android:autoStart="true" android:background="@color/white" android:flipInterval="2000" android:inAnimation="@anim/anim_come_in" android:outAnimation="@anim/anim_get_out"></zhang.guo.qiang.viewfilpers.ViewFilpers> </LinearLayout>
动画浅入:anim_come_in.xml
动画浅出:anim_get_out.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromYDelta="100%p" android:toYDelta="0" android:duration="1000"/> </set>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="1000" android:fromYDelta="0" android:toYDelta="-100%p" /> </set>
//手敲操作,欢迎指正