import android.graphics.Color; import android.os.Bundle; import android.support.design.widget.TabLayout; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private List<TextView> list; String[] array = {"推荐", "社会", "军事", "娱乐", "热点", "图片", "视频", "段子", "游戏", "体育"}; private TabLayout mainTab; private ViewPager mainVp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); getData(); } private void initView() { mainTab = (TabLayout) findViewById(R.id.main_tab); mainVp = (ViewPager) findViewById(R.id.main_vp); mainTab.setTabMode(mainTab.MODE_SCROLLABLE); mainTab.setupWithViewPager(mainVp); } private void getData() { list = new ArrayList<TextView>(); for (int i = 0; i < 10; i++) { TextView textView = new TextView(this); textView.setText("内容" + i); textView.setTextSize(22); textView.setTextColor(Color.RED); list.add(textView); } MyAdapter adapter = new MyAdapter(); mainVp.setAdapter(adapter); } class MyAdapter extends PagerAdapter { @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(list.get(position)); return list.get(position); } @Override public CharSequence getPageTitle(int position) { return array[position]; } } }
==================================================================
package com.bawei.zhouwangwei.demo; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.support.annotation.Nullable; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; /** * Created by Mr.周 on 2017/9/5. */ public class MySwichBtn extends View { //滑块使用的图片 Bitmap bitmap; //画笔 Paint paint; //滑动图片的宽高 int bitWidth; int bitHeight; //滑块在布局文件中设置的宽高 float scaleWidth; float scaleHeight; //自定义属性数组 TypedArray typedArray; //滑块的状态值 boolean isCheck = false; //控件本身的宽高 int viewWidth; int viewHeight; //手指点击X坐标值 float pointX; public MySwichBtn(Context context) { super(context); init(context); } public MySwichBtn(Context context, @Nullable AttributeSet attrs) { super(context, attrs); typedArray = context.obtainStyledAttributes(attrs, R.styleable.MySwichBtn); init(context); } public MySwichBtn(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); } public void init(Context context) { paint = new Paint(); bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher); bitWidth = bitmap.getWidth(); bitHeight = bitmap.getHeight(); scaleWidth = typedArray.getDimension(R.styleable.MySwichBtn_img_swich_width, bitWidth); scaleHeight = typedArray.getDimension(R.styleable.MySwichBtn_img_swich_height, bitHeight); float scaleX = (float) scaleWidth / (float) bitWidth; float scaleY = (float) scaleHeight / (float) bitHeight; Matrix matrix = new Matrix(); matrix.postScale(scaleX, scaleY); bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitWidth, bitHeight, matrix, false); bitWidth = bitmap.getWidth(); bitHeight = bitmap.getHeight(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); //getMode()改方法用来获取宽高的模式 int mode = MeasureSpec.getMode(widthMeasureSpec); viewWidth = MeasureSpec.getSize(widthMeasureSpec); switch (mode) { case MeasureSpec.AT_MOST: Log.i("===============", "AT_MOST: " + widthMeasureSpec); viewWidth = bitHeight * 3; break; case MeasureSpec.EXACTLY: Log.i("===============", "EXACTLY: " + widthMeasureSpec); break; case MeasureSpec.UNSPECIFIED: Log.i("===============", "UNSPECIFIED: "); break; } //该方法用来设置 最终的确定的宽高 setMeasuredDimension(viewWidth, bitHeight); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (isCheck) { paint.setColor(Color.BLUE); } else { paint.setColor(Color.RED); } canvas.drawRect(0, 0, viewWidth, 200, paint); canvas.drawBitmap(bitmap, pointX, 0, paint); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_UP: if (event.getX() > viewWidth / 2) { pointX = viewWidth - bitWidth; isCheck = true; } else { pointX = 0; isCheck = false; } listener.onClick(isCheck); invalidate(); break; default: pointX = event.getX() - bitWidth / 2; if (event.getX() > viewWidth - bitWidth / 2) { pointX = viewWidth - bitWidth; } if (event.getX() < bitWidth / 2) { pointX = 0; } invalidate(); break; } return true; } public MyOnClickListener listener; public interface MyOnClickListener { public void onClick(boolean b); } public void setOnMyOnClickListener(MyOnClickListener listener) { this.listener = listener; } }