欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

頂部橫向滑動菜單效果

系統(tǒng) 2203 0
這個是在在別人的基礎(chǔ)上改的(基本上沒改),我就不重造輪子了。
頂部橫向滑動菜單效果
先是自定義的橫向ScollView,用Adapter模式填充數(shù)據(jù)
    
import com.example.demo.R;

import android.content.Context;
import android.database.DataSetObserver;
import android.util.AttributeSet;
import android.util.SparseArray;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class NavigationHorizontalScrollView extends HorizontalScrollView implements OnClickListener {

	public NavigationHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init();
	}

	public NavigationHorizontalScrollView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init();
	}

	public NavigationHorizontalScrollView(Context context) {
		super(context);
		init();
	}

	private FrameLayout mFrameLayout;
	private BaseAdapter mBaseAdapter;
	private SparseArray<View> mSparseArray;
	private int oldPosition;
	private TextView backView;
	private ImageView preImage, nextImage;

	@Override
	protected void onScrollChanged(int l, int t, int oldl, int oldt) {
		super.onScrollChanged(l, t, oldl, oldt);
		resetImageView();
	}

	private void resetImageView() {
		/* 計算水平方向滾動條的滑塊的偏移值。 */
		int ScrollOffset = computeHorizontalScrollOffset();
		/* 滾動條長度 */
		int ScrollExtent = computeHorizontalScrollExtent();
		/* 滾動條當(dāng)前位置 */
		int curScrollLoc = ScrollOffset + ScrollExtent;
		/* scrollView 的可滾動水平范圍是所有子視圖的寬度總合。 */
		int ScrollRange = computeHorizontalScrollRange();

		/* 如果當(dāng)前位置 在ScrollExtent 和 ScrollRange 之間,左右兩邊的View都顯示 */
		if (curScrollLoc > ScrollExtent && curScrollLoc < ScrollRange) {
			if (preImage != null)
				preImage.setVisibility(View.VISIBLE);
			if (nextImage != null)
				nextImage.setVisibility(View.VISIBLE);
			return;
		}
		/* 如果滾動到最左邊 */
		if (curScrollLoc == ScrollExtent) {
			if (preImage != null)
				preImage.setVisibility(View.INVISIBLE);
			return;
		}
		/* 如果滾動到最右邊 */
		if (curScrollLoc >= ScrollRange) {
			if (nextImage != null)
				nextImage.setVisibility(View.INVISIBLE);
			return;
		}

	}

	private void init() {
		mFrameLayout = new FrameLayout(getContext());
		mFrameLayout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
		addView(mFrameLayout);
		mSparseArray = new SparseArray<View>();
	}

	private void buildItemView() {
		if (mBaseAdapter == null)
			return;
		LinearLayout linearLayout = new LinearLayout(getContext());
		for (int i = 0; i < mBaseAdapter.getCount(); i++) {
			View view = mBaseAdapter.getView(i, mSparseArray.get(i), this);
			view.setOnClickListener(this);
			mSparseArray.put(i, view);
			linearLayout.addView(mSparseArray.get(i));
		}
		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
				LinearLayout.LayoutParams.FILL_PARENT);
		layoutParams.gravity = Gravity.CENTER_VERTICAL;
		backView = (TextView) LayoutInflater.from(getContext()).inflate(R.layout.navigation_item, null);
		backView.setBackgroundResource(R.drawable.bg_view);
		backView.setPadding(0, 5, 0, 5);
		mFrameLayout.addView(backView, layoutParams);
		mFrameLayout.addView(linearLayout);
	}

	public void setAdapter(BaseAdapter baseAdapter) {
		if (baseAdapter == null)
			return;
		mBaseAdapter = baseAdapter;
		mBaseAdapter.registerDataSetObserver(new DataSetObserver() {
			@Override
			public void onChanged() {
				oldPosition = 0;
				buildItemView();
				super.onChanged();
			}
		});
		mBaseAdapter.notifyDataSetChanged();
	}

	@Override
	public void onClick(View v) {
		if (v.getId() == preImage.getId()) {
			fling(-800);
			return;
		}
		if (v.getId() == nextImage.getId()) {
			fling(800);
			return;
		}
		if (onItemClickListener != null) {
			int position = mSparseArray.indexOfValue(v);
			startAnimation(position);
			oldPosition = position;
			onItemClickListener.click(position);
		}
	}

	private void startAnimation(int position) {
		AnimationSet animationSet = new AnimationSet(true);
		animationSet.addAnimation(buildScaleAnimation(oldPosition, position));
		animationSet.addAnimation(buildTranslateAnimation(oldPosition, position));
		animationSet.setInterpolator(new AccelerateDecelerateInterpolator());
		/* 移動后不復(fù)原,不返回動畫前的狀態(tài)位置 */
		animationSet.setFillAfter(true);
		animationSet.setDuration(500);
		backView.startAnimation(animationSet);
		invalidate();
	}

	private Animation buildScaleAnimation(int oldPosition, int position) {
		float oldWidth = getItemView(oldPosition).getWidth();
		float newWidth = getItemView(position).getWidth();
		float fromX = oldWidth / backView.getWidth();
		float toX = newWidth / backView.getWidth();
		ScaleAnimation animation = new ScaleAnimation(fromX, toX, 1f, 1f, Animation.ABSOLUTE, 0.0f, Animation.ABSOLUTE,
				0.0f);
		return animation;
	}

	private Animation buildTranslateAnimation(int oldPosition, int position) {
		TranslateAnimation animation = new TranslateAnimation(getItemView(oldPosition).getLeft(), getItemView(position)
				.getLeft(), 0, 0);
		return animation;
	}

	private View getItemView(int position) {
		return mSparseArray.get(position);
	}

	public interface OnItemClickListener {
		void click(int position);
	}

	private OnItemClickListener onItemClickListener;

	public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
		this.onItemClickListener = onItemClickListener;
	}

	public void setImageView(ImageView preImage, ImageView nextImage) {
		this.preImage = preImage;
		this.nextImage = nextImage;
		if (preImage != null) {
			preImage.setOnClickListener(this);
		}
		if (nextImage != null) {
			nextImage.setOnClickListener(this);
		}
	}

}

  


用法:
    
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.example.demo.model.Navigation;
import com.example.demo.widget.NavigationHorizontalScrollView;

public class MainActivity extends Activity{
		
	private Context context;
	private List<Navigation> navs = buildNavigation();
	private NavigationHorizontalScrollView mHorizontalScrollView;
	private TextView tv;
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		context=this;
		tv=(TextView)findViewById(R.id.tv);
		tv.setText("You clicked "+navs.get(0).getTitle());
		
		mHorizontalScrollView=(NavigationHorizontalScrollView)findViewById(R.id.horizontal_scrollview);
		mHorizontalScrollView.setImageView((ImageView) findViewById(R.id.iv_pre),(ImageView) findViewById(R.id.iv_next));
				
		mHorizontalScrollView.setOnItemClickListener(new NavigationHorizontalScrollView.OnItemClickListener() {
			
			@Override
			public void click(int position) {
				// TODO Auto-generated method stub
				tv.setText("You clicked "+navs.get(position).getTitle());
			}
		});
		
		mHorizontalScrollView.setAdapter(new NavigationAdapter());
		
	}

	private List<Navigation> buildNavigation() {
		List<Navigation> navigations = new ArrayList<Navigation>();
		navigations.add(new Navigation(0, "url", "首頁"));
		navigations.add(new Navigation(1, "url", "新聞"));
		navigations.add(new Navigation(2, "url", "科技"));
		navigations.add(new Navigation(3, "url", "設(shè)置"));
		navigations.add(new Navigation(4, "url", "朋友"));
		navigations.add(new Navigation(5, "url", "測試長標(biāo)題"));
		navigations.add(new Navigation(7, "url", "測試"));
		navigations.add(new Navigation(6, "url", "我的寶貝"));
		return navigations;
	}

	
	class NavigationAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return navs.size();
		}

		@Override
		public Object getItem(int position) {
			return navs.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) {
			if (convertView == null) {
				convertView = LayoutInflater.from(context).inflate(R.layout.navigation_item, null);
			}
			((TextView) convertView).setText(navs.get(position).getTitle());
			return convertView;
		}

	}
	
}

  

布局:
    
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >

    <ImageView
        android:id="@+id/iv_pre"
        android:layout_width="30dip"
        android:layout_height="30dip"
        android:layout_gravity="center_vertical"
        android:src="@drawable/ic_pre" />

    <com.example.demo.widget.NavigationHorizontalScrollView
        android:id="@+id/horizontal_scrollview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_weight="1"
        android:paddingBottom="2dip"
        android:paddingTop="2dip"
        android:scrollbars="none" />

    <ImageView
        android:id="@+id/iv_next"
        android:layout_width="30dip"
        android:layout_height="30dip"
        android:layout_gravity="center_vertical"
        android:src="@drawable/ic_next" />

	</LinearLayout>
    <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    	<TextView 
    	    android:id="@+id/tv"
    	    android:layout_width="wrap_content"
        	android:layout_height="wrap_content"
        	android:textColor="@android:color/black"
        	android:textSize="24sp"
        	android:layout_gravity="center"
    	    />
    </FrameLayout>

</LinearLayout>

  


具體看附件

頂部橫向滑動菜單效果


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美成人三级一区二区在线观看 | 欧美激情免费观看一区 | 丝袜捆绑调教视频免费区 | 亚洲国产午夜精品乱码 | 午夜电影网 | 精品成人一区二区三区 | 国产伦精品一区二区三区精品视频 | 成人黄色免费在线观看 | 精品日韩欧美国产一区二区 | 欧洲成人全免费视频网站 | 波多野结衣在线资源 | 麻豆md国产在线观看 | 91日日 | 91av在线免费 | 亚洲欧美v国产一区二区 | 欧美在线观看视频一区 | 亚洲综合久久伊人热 | 国产偷国产偷亚洲高清在线 | 激情中文网 | 欧美成人免费午夜影视 | 精品尤物 | 中文字幕综合在线观看 | 免费二区 | 亚洲AV久久久噜噜噜久久 | 一a一级片 | 色婷婷.com | 日本九九视频 | 色哟哟在线观看精品入口 | 久久久久久久一区二区 | 国产一级做a爰片在线 | 免费国产成人午夜在线观看 | 精品一区二区三区在线观看 | 久久亚 | 韩日a级片 | 国产欧美精品午夜在线播放 | 日本在线视频不卡 | 人人看人人做 | 日韩欧美色 | 欧美日韩精品一区二区 | 色综合激情 | 国产麻豆一区二区三区 |