利用HorizontalScrollView实现页签效果
来源:互联网 发布:淘宝宝贝评价没有了 编辑:程序博客网 时间:2024/05/01 19:27
前段时间,由于项目中的需要,用到了类似页签的功能。这两天没什么时间,专门研究了一下。大致效果如下图:
当点击顶部的tag的时候,文字的北京按钮,就会移动到相应的位置,下面的内容也会产生相应的变化。
布局:
<RelativeLayout 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" ><HorizontalScrollView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/hsview" android:scrollbars="none" android:layout_marginTop="10dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical"> <View android:id="@+id/view" android:layout_width="60dp" android:layout_height="30dp" android:background="@drawable/tag_shape" android:visibility="visible" android:tag="0"/> <LinearLayout android:id="@+id/tag_lly" android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center_vertical"></LinearLayout> </RelativeLayout></HorizontalScrollView><TextView android:id="@+id/content_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@null" android:text="测试" android:layout_centerHorizontal="true" android:layout_margin="10dp" android:textColor="@color/commed_red" /></RelativeLayout>可以看到布局非常简单,主要就是一个HorizontalScrollView和一个textview,HorizontalScrollView主要是用来显示标签并进行标签的切换的,TextView根据点击的标签来显示不同的内容。
代码:
public class MainActivity extends ActionBarActivity { private View view; private LinearLayout tagLLY; private LinearLayout.LayoutParams params; private String[] tags; private int oldPosition=0; private int newPosition=0; private RelativeLayout.LayoutParams viewParams; private int screenWidth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); view=findViewById(R.id.view); tagLLY= (LinearLayout) findViewById(R.id.tag_lly); screenWidth=getResources().getDisplayMetrics().widthPixels; viewParams= (RelativeLayout.LayoutParams) view.getLayoutParams(); viewParams.width=screenWidth/5-DipUtils.dipToPx(this,20); viewParams.setMargins(DipUtils.dipToPx(MainActivity.this, 10), DipUtils.dipToPx(MainActivity.this, 0), DipUtils.dipToPx(MainActivity.this,10), DipUtils.dipToPx(MainActivity.this,0)); view.setLayoutParams(viewParams); tags=new String[]{"补水","祛痘","美白","美妆","美体","护肤","美甲"}; initView(); } private void initView() { for(int i=0;i<tags.length;i++) { TextView tv=new TextView(MainActivity.this); tv.setText(tags[i]); tv.setTextColor(getResources().getColor(R.color.commed_red)); params= new LinearLayout.LayoutParams(screenWidth/5-DipUtils.dipToPx(this,20), LinearLayout.LayoutParams.WRAP_CONTENT); params.setMargins((int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()), (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics()), (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 10, getResources().getDisplayMetrics()), (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 5, getResources().getDisplayMetrics())); tv.setGravity(Gravity.CENTER); tv.setLayoutParams(params); tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13); tv.setTag("tag"+i); tv.setOnClickListener(new TagClick()); tagLLY.addView(tv); } TextView tv= (TextView) tagLLY.getChildAt(0); tv.setTextColor(Color.WHITE); } private class TagClick implements View.OnClickListener { @Override public void onClick(View v) { String tag= (String) v.getTag(); newPosition= Integer.valueOf(tag.substring(tag.indexOf("g")+1)); /* TranslateAnimation ta=new TranslateAnimation(Animation.RELATIVE_TO_SELF,oldPosition ,Animation.RELATIVE_TO_SELF,newPosition,Animation.RELATIVE_TO_SELF,0.0f, Animation.RELATIVE_TO_SELF,0.0f);*/ int fromX=Integer.valueOf(view.getTag().toString()); int toX=newPosition*screenWidth/5; TranslateAnimation ta=new TranslateAnimation(fromX,toX,0,0); ta.setFillAfter(true); ta.setDuration(200); TextView textview= (TextView) tagLLY.findViewWithTag("tag" + oldPosition); textview.setTextColor(getResources().getColor(R.color.commed_red)); oldPosition=newPosition; view.setTag(toX); view.startAnimation(ta); ((TextView) v).setTextColor(Color.WHITE); } }}代码也非常简单,在onCreata方法中,主要初始化控件和数据的操作,在initview方法中我们初始化标签,并设置每一个Textview的数据和相应参数。并且为每一个Textview注册了一个点击事件,比较麻烦的就在这里了。
可以看到在点击事件中,首先我们获取view也就是标签后面背景按钮的起始位置,然后计算出需要移动的终点,这个终点就是你当前点击的tag的位置乘以每个标签的宽度。然后把得到的这两个结果传入到TranslateAnimation中,就可以了。后面就是将当前的坐标位置,设置给view,重置之前的标签样式就可以了。
0 0
- 利用HorizontalScrollView实现页签效果
- 利用 HorizontalScrollView 实现滑动页面时的缩放效果
- 用RadioButton实现页签效果
- HorizontalScrollView实现侧滑效果
- 利用HorizontalScrollView实现水平滚动
- jquery页签效果
- ViewPager和Fragment结合,利用(HorizontalScrollView)实现指示器与ViewPager同时滑动的动态效果
- 选择屏幕-实现页签选择的效果
- CSS实例(四):实现TabView(页签)效果
- 使用js实现tab页签切换效果
- java 实现tab页签切换 鼠标悬浮效果
- 使用js实现tab页签切换效果
- TabLayout+ViewPager 实现页签滑动的效果
- 利用Android Material Design实现页签联动
- 用HorizontalScrollView布局实现类似Gallery效果
- 使用HorizontalScrollView实现水平控件拖动效果
- 用HorizontalScrollView布局实现类似Gallery效果
- android中HorizontalScrollView实现viewpager的效果
- [待完善]提升Android Studio的编译速度
- 内核Alsa之ASoC
- 从源码角度分析Android中UID与GID的分配
- keil c 的错误error C141: syntax error near '='
- JAVA嵌入运行Groovy脚本
- 利用HorizontalScrollView实现页签效果
- LeetCode Maximum Product Subarray
- 使用Maven来管理项目-pom.xml详细解读(三)
- ZBar扫码
- CADisplayLink
- C++——运算符重载(四)
- PMI-ACP敏捷认证:敏捷开发的6个实战经验
- Spring+MyBatis多数据源配置实现
- HDU 1323 Perfection (水题)