自定义控件之滑动

来源:互联网 发布:化妆品网络销售技巧 编辑:程序博客网 时间:2024/05/23 22:02
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;    }}

原创粉丝点击