package com.duguang.baseanimation.ui.tab.scroll.widget;
import java.util.List;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import com.duguang.baseanimation.R;
import com.duguang.baseanimation.ui.tab.scroll.widget.MyHorizontalScrollView.OnComputeScrollListener;
public class PluginScrollView extends RelativeLayout{
private MyHorizontalScrollView scrollview;
private LinearLayout layout;
private ScrollIndicator indicator;
private ViewPager viewpager;
private int currentSelectedButton = -1;
private int singleButtonWidth = 90;
private Context context;
private List<View> testList;
public PluginScrollView(Context context) {
super(context);
this.context = context;
init();
}
public PluginScrollView(Context context, ViewPager viewPager) {
this(context,viewPager,null);
}
public PluginScrollView(Context context, ViewPager viewPager,List<View> testList) {
super(context);
this.context = context;
this.viewpager = viewPager;
this.testList = testList;
init();
}
public PluginScrollView(Context context, AttributeSet attr) {
super(context, attr);
this.context = context;
init();
}
private void init(){
View view = View.inflate(context, R.layout.activity_tab_scrollview_plugin, this);
scrollview = (MyHorizontalScrollView)view
.findViewById(R.id.my_horizontal_scrollview);
scrollview.setHorizontalScrollBarEnabled(false);
scrollview.setOnComputeScrollListener(new OnComputeScrollListener() {
@Override
public void computeScroll(View view) {
// ���Ʒ����ͷ����ʾ���
setIndicatorVisibility(view);
}
});
layout = (LinearLayout)view.findViewById(R.id.layout);
indicator = new ScrollIndicator(context);
IndicatorArrowClickListener listener = new IndicatorArrowClickListener();
indicator.setLeftArrowClickListener(listener);
indicator.setRightArrowClickListener(listener);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// TODO Auto-generated method stub
super.onLayout(changed, l, t, r, b);
if(layout != null){
View button = layout.getChildAt(0);
if(button != null){
singleButtonWidth = button.getWidth();
}
}
}
public void setViewPager(ViewPager viewPager){
this.viewpager = viewPager;
}
public void setTestList(List<View> testList){
this.testList = testList;
initButtons();
}
public List<View> getTestList(){
return this.testList;
}
private void initButtons(){
if(testList == null) return;
currentSelectedButton = -1;
layout.removeAllViews();
for(int i=0;i<testList.size();i++){
final int j = i;
Button mbutton = new Button(context);
mbutton.setText("Button"+i);
mbutton.setBackgroundResource(R.drawable.btn_scrollview_plugin_unselected);
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
mbutton.setLayoutParams(params);
mbutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
viewpager.setCurrentItem(j, true);
}
});
layout.addView(mbutton);
}
if(testList.size() > 0){
buttonSelected(0);
}
setIndicatorVisibility(scrollview);
}
public int size(){
if(testList == null) return 0;
return testList.size();
}
public void buttonSelected(int position){
if(position == currentSelectedButton){
return ;
}
if(currentSelectedButton != -1){
getButtonInLayout(currentSelectedButton).setSelected(false);
getButtonInLayout(currentSelectedButton).setBackgroundResource(R.drawable.btn_scrollview_plugin_unselected);
}
getButtonInLayout(position).setSelected(true);
getButtonInLayout(position).setBackgroundResource(R.drawable.bg_scrollview_pink);
currentSelectedButton = position;
autoScrollView(position);
}
private void autoScrollView(int location){
int displayX = scrollview.getScrollX(); // ��������� ���
int displayMaxX = getWidth() + displayX;// ����������յ�
int icoScrollX = 0;
for(int i=0;i<location;i++){
icoScrollX += layout.getChildAt(i).getWidth();// ָ����ť�ľ���߾�ľ���
}
// ָ����ť�ľ���߾�ľ��� + ������
int icoScrollMaxX = layout.getChildAt(location).getWidth() + icoScrollX;
if(icoScrollX < displayX){
// �������� ����
scrollview.smoothScrollBy(icoScrollX - displayX - 10, 0);
}else if(icoScrollMaxX > displayMaxX){
// �������� ����
scrollview.smoothScrollBy(icoScrollMaxX - displayMaxX, 0);
}
setIndicatorVisibility(scrollview);
}
private Button getButtonInLayout(int i){
View view = layout.getChildAt(i);
if(view instanceof Button){
return (Button)view;
}
return null;
}
private void setIndicatorVisibility(View v){
Log.d("debug", "setIndicatorVisibility ==> v.getScrollX = "+v.getScrollX());
if(v.getScrollX() <= 1){
indicator.hideLeftArrow();
}else{
indicator.showLeftArrow();
}
int seg = layout.getWidth() - v.getScrollX() -v.getWidth();
if(seg >= 1){
indicator.showRightArrow();
}else{
indicator.hideRightArrow();
}
}
private class IndicatorArrowClickListener implements OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.imgview_arrow_left:
scrollview.smoothScrollBy(-singleButtonWidth, 0);
break;
case R.id.imgview_arrow_right:
scrollview.smoothScrollBy(singleButtonWidth, 0);
break;
}
}
};
}