android之滑动选择切换字符
来源:互联网 发布:7z linux解压命令 编辑:程序博客网 时间:2024/05/22 04:27
看见有些应用实现了一个右边竖着26个字母,手指在字母区域滑动可以让屏幕中间的字符不断的切换的效果,所以最近也跟着实现了一个,但效果比较一般,不能再320*480的屏幕上真确显示,希望贴出来后有读者能一起交流改进这个dmeo,在该demo在字符外点击屏幕后滑动在字符区域屏幕是无效果的,因为字符区域就是一个view层,只有在该view层事件才能触发对应的事件,详细看代码。在此先上张图:
工具处理类:
package cn.hanspk;import android.content.Context;/**因为密度问题的单位转换*/public class dip_px_Util {/** * dip转换成px * @param context * @param dipValue * @return */public static int dip2px(Context context, float dipValue){ final float scale = context.getResources().getDisplayMetrics().density; return (int)(dipValue * scale + 0.5f); }/** * px转换成dip * @param context * @param pxValue * @return */public static int px2dip(Context context, float pxValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (pxValue / scale + 0.5f);}}
demo入口类 MainAcitivity
package cn.hanspk;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.DisplayMetrics;import android.view.View;import android.view.Window;import android.view.WindowManager;import android.widget.TextView;public class MainActivity extends Activity {private static MainActivity mIntance = null;public static final int show_char = 0; // 显示字符public static final int dimiss_char = 1; //隐藏字符private TextView char_value = null;private TestView tv_myview = null;/** * 控制字符的显示和隐藏 */public Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubswitch(msg.what){case show_char:char_value.setVisibility(View.VISIBLE);char_value.setText(tv_myview.getChar());break;case dimiss_char:char_value.setVisibility(View.GONE);break;}}};/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/** * 设置无标题和全屏 */this.requestWindowFeature(Window.FEATURE_NO_TITLE);this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);mIntance = this;setContentView(R.layout.main); char_value = (TextView)findViewById(R.id.text_value_id); char_value.setVisibility(View.GONE); tv_myview = (TestView)findViewById(R.id.textId);}public static MainActivity getIntance() {return mIntance;}}
字符处理类:
package cn.hanspk;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Paint.FontMetrics;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.View;public class TestView extends View {private Context context = null;private String[] CharSet = { "A", "B", "C", "D", "E", "F", "G", "H", "I","J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V","W", "X", "Y", "Z" };private Paint paint = null;private int charhpx; //一个字符 的高度 private int AllH; //26个字符的总高度private int charpx; //显示字符的最大宽度public TestView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);// TODO Auto-generated constructor stub}public TestView(Context context) {super(context);// TODO Auto-generated constructor stub}public TestView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubthis.context = context;paint = new Paint();paint.setColor(Color.WHITE);paint.setTextSize(25);/** * 找到字符中宽度最宽的字符 */int temp = 0;for (int j = 0; j < CharSet.length - 1; j++) {if (((int) paint.measureText(CharSet[j])) < ((int) paint.measureText(CharSet[j + 1]))) {temp = (int) paint.measureText(CharSet[j + 1]);} else {temp = (int) paint.measureText(CharSet[j]);}}/** * 最大宽度加上2 */charpx = dip_px_Util.dip2px(context, temp)+ dip_px_Util.dip2px(context, 2);System.out.println("-----" + dip_px_Util.dip2px(context, temp));/** * 获得单个字符的高度 */FontMetrics fm = paint.getFontMetrics();charhpx = (int) fm.top;System.out.println("-----》"+charhpx);System.out.println("-----" + dip_px_Util.px2dip(context, -charhpx));System.out.println("-----" + dip_px_Util.dip2px(context, 5));//取得所有字符的的高度AllH = charhpx * CharSet.length;System.out.println("-----" + dip_px_Util.px2dip(context, AllH));//this.onMeasure(0, 0);}@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);for (int i = 0; i != CharSet.length; i++) {canvas.drawText(CharSet[i], dip_px_Util.px2dip(context, 2),dip_px_Util.px2dip(context, -charhpx)* ((i + 1) * (float) 1.5), paint);}}/** * 设置改view的大小 */@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {// TODO Auto-generated method stubsetMeasuredDimension(charpx, (-charhpx) * CharSet.length);}private boolean isShowChar = false;@Overridepublic boolean onTouchEvent(MotionEvent event) {// TODO Auto-generated method stubint y = (int) event.getY();int action = event.getAction();switch (action) {case MotionEvent.ACTION_DOWN://System.out.println("====>" + y);if (y < ((-charhpx) * CharSet.length)) {int id = y / (-charhpx);//System.out.println("----====>" + CharSet[id]);setChar(CharSet[id]);isShowChar = true;RefreshCharVaule();}break;case MotionEvent.ACTION_MOVE:y = (int) event.getY();System.out.println("====>" + y);if ((0<y)&&y < ((-charhpx) * CharSet.length)) {int id = y / (-charhpx);//System.out.println("----====>" + CharSet[id]);setChar(CharSet[id]);RefreshCharVaule();}break;case MotionEvent.ACTION_UP:isShowChar = false;RefreshCharVaule();break;}return true;}private String char_value;private void setChar(String char_value) {this.char_value = char_value;}public String getChar() {return this.char_value;}/** * 更新显示的字符 */private void RefreshCharVaule(){if (isShowChar) {// canvas.drawText(text, , y, paint);MainActivity.getIntance().handler.sendEmptyMessage(MainActivity.getIntance().show_char);}else if(!isShowChar){MainActivity.getIntance().handler.sendEmptyMessage(MainActivity.getIntance().dimiss_char);}}}
demo的xml布局文件
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <cn.hanspk.TestView android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="15dp" android:id="@+id/textId" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text="A" android:layout_height="wrap_content" android:textSize="40sp" android:id="@+id/text_value_id" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:layout_width="wrap_content"/></RelativeLayout>
- android之滑动选择切换字符
- android之滑动选择切换字符
- android之左右滑动切换activity
- Android之fragment点击切换和滑动切换结合
- Android开发之滑动选择菜单(仿QQ滑动删除)
- Android滑动切换activity
- android首页滑动切换
- Android Fragment滑动切换
- Android 横向滑动选择
- Android学习笔记之滑动翻页(屏幕切换)
- Android学习笔记之滑动翻页(屏幕切换)
- Android学习笔记之不同activity之间滑动切换
- Android学习笔记之滑动翻页(屏幕切换)
- Android学习笔记之不同activity之间滑动切换
- Android之如何实现滑动页面切换【Fragment】
- Android ViewPager特效之水滴效果的滑动切换页面
- Android自定义控件之实现滑动选择开关
- Android左右滑动切换页面
- 10 内存描述符
- SYSTEM SYSAUX 表空间恢复
- 百度地图WGS4转换真实GPS及逆向转换
- delphi 监控系统文件操作
- Qt 对话框的使用
- android之滑动选择切换字符
- C#中struct和C中的struct的一个区别
- 桃花庵--程序员版
- TCP listen() Backlog 参数详解
- Java 程序员应该了解的 10 个面向对象设计原则
- MSCHART 柱状图实例
- Java浮点数的精确计算及表示
- Android 平台版本和API-Level的对应关系
- C++中类的构造函数与析构函数(成员初始化列表)