自定义控件之滑动
来源:互联网 发布:化妆品网络销售技巧 编辑:程序博客网 时间: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; }}
阅读全文
0 0
- 自定义控件之滑动
- 自定义控件之滑动
- 自定义控件之滑动开关
- 自定义控件之滑动按钮
- 自定义控件专题之二:滑动开关
- iOS自定义控件之滑动横幅
- android 自定义控件之滑动按钮
- Android自定义控件之滑动解锁
- Android自定义控件之滑动开关
- Android进阶自定义控件之滑动开关
- 自定义组合控件之滑动item+删除
- 自定义控件之滑动解锁、圆中嵌字
- Android自定义控件之滑动解锁
- 左右滑动自定义控件
- 自定义控件--滑动删除
- 自定义控件--滑动按钮
- 自定义控件:滑动开关
- 滑动控件自定义使用
- troubleshooting之解决JVM GC导致的shuffle文件拉取失败
- PHP,其他类型转化为对象、以及stdClass
- 文件搭建后找不到变量/函数定义问题
- Spring Boot获取前端页面参数的几种方式总结
- 抽象类和接口
- 自定义控件之滑动
- 集合-Stack
- poj-2318 TOYS (叉积)
- 数据结构_队列-循环队列实现模拟舞伴配对问题
- list与Set、Map区别及适用场景
- 斐波那契数列(迭代和递归)
- 物体定位Localization
- 全概公式和贝叶斯公式的理解
- 部分刷题记录