仿IOS 带字母索引的滑轮控件,2024Android常见面试题分享

Boolean state_pressed = true;

private String cities[] ={“北京版”, “天津版”, “上海版”, “重庆版”, “河北版”, “山西版”, “辽宁版”, “吉林版”, “黑龙江版”, “江苏版”, “浙江版”, “安徽版”,

“福建版”, “江西版”, “山东版”, “河南版”, “湖北版”, “湖南版”, “广东版”, “甘肃版”, “四川版”, “贵州版”, “海南版”, “云南版”,

“青海版”, “陕西版”, “广西版”, “西藏版”, “宁夏版”, “新疆版”, “内蒙古版”, “澳门版”, “香港版”, “台湾版”,“全国版”};

private String[] id = { “1”, “2”, “3”, “4”, “5”, “6” ,“7”,“8”,“9”,“10”,“11”,“12”,“13”,“14”,“15”,“16”,

“17”, “18”, “19”, “20”, “21”, “22” ,“23”,“24”,“25”,“26”,“27”,“28”,“29”,“30”,“31”,“32”,“33”,“34”,“35”};

private PickerScrollView pickerscrlllview; // 滚动选择器

private List list; // 滚动选择器数据

private CharacterParser mCharacterParser;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initView();

initData();

}

public void initView() {

LetterSideBar letterSideBar = (LetterSideBar) findViewById(R.id.cs_letter_sb);

letterSideBar

.setOnTouchingLetterChangedListener(new LetterSideBar.OnTouchingLetterChangedListener() {

@Override

public void onTouchingLetterChanged(String letter) {

int jumpPos = getPositionForSection(letter.charAt(0));

pickerscrlllview.setSelected(jumpPos);

}

});

pickerscrlllview = (PickerScrollView) findViewById(R.id.pickerscrlllview);

pickerscrlllview.setOnSelectListener(pickerListener);

findViewById(R.id.location_confirm_btn).setOnClickListener(this);

}

private void initData() {

mCharacterParser = CharacterParser.getInstance();

list = filledData();

PinyinComparator pinyinComparator = new PinyinComparator();

Collections.sort(list, pinyinComparator);

pickerscrlllview.setData(list);

pickerscrlllview.setSelected(0);

}

@Override

protected void onResume() {

super.onResume();

}

public void onPause() {

super.onPause();

}

private List filledData() {

List sortList = new ArrayList();

for (int i = 0, n = cities.length; i < n; i++) {

Pickers picker = new Pickers();

picker.setShowConetnt(cities[i]);

picker.setShowId(id[i]);

String pinyin = mCharacterParser.getSelling(cities[i]);

picker.setPinyin(pinyin);

String sortString = pinyin.substring(0, 1).toUpperCase();

if (sortString.matches(“[A-Z]”)) {

picker.setSortLetter(sortString.toUpperCase());

} else {

picker.setSortLetter(“#”);

}

sortList.add(picker);

}

return sortList;

}

public int getPositionForSection(int section) {

for (int i = 0; i < list.size(); i++) {

String sortStr = list.get(i).getSortLetter();

char firstChar = sortStr.toUpperCase().charAt(0);

if (firstChar == section) {

return i;

}

}

return -1;

}

onSelectListener pickerListener = new onSelectListener() {

@Override

public void onSelect(Pickers pickers) {

Toast.makeText(MainActivity.this, pickers.getShowConetnt(), Toast.LENGTH_LONG).show();

}

};

@Override

public void onBackPressed() {

super.onBackPressed();

}

@Override

public void onClick(View v) {

switch (v.getId()) {

default:

break;

}

}

}


自定义滑动view


package com.example.picscrollview;

import java.util.ArrayList;

import java.util.List;

import java.util.Timer;

import java.util.TimerTask;

import com.example.test.R;

import android.annotation.SuppressLint;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Paint;

import android.graphics.Paint.Align;

import android.graphics.Paint.FontMetricsInt;

import android.graphics.Paint.Style;

import android.os.Handler;

import android.os.Message;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.View;

/**

  • 自定义滚动选择器

  • @author zlw

*/

@SuppressLint({ “HandlerLeak”, “ClickableViewAccessibility” })

public class PickerScrollView extends View {

public static final String TAG = “PickerView”;

/**

  • text之间间距和minTextSize之比

*/

public static final float MARGIN_ALPHA = 2.8f;

/**

  • 自动回滚到中间的速度

*/

public static final float SPEED = 2;

private List mDataList;

/**

  • 选中的位置,这个位置是mDataList的中心位置,一直不变

*/

private int mCurrentSelected;

private Paint mPaint;

private float mMaxTextSize = 14;

private float mMinTextSize = 6;

private float mMaxTextAlpha = 255;

private float mMinTextAlpha = 120;

private int mColorText = 0x333333;

private int mViewHeight;

private int mViewWidth;

private float mLastDownY;

/**

  • 滑动的距离

*/

private float mMoveLen = 0;

private boolean isInit = false;

private onSelectListener mSelectListener;

private Timer timer;

private MyTimerTask mTask;

Handler updateHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

if (Math.abs(mMoveLen) < SPEED) {

mMoveLen = 0;

if (mTask != null) {

mTask.cancel();

mTask = null;

performSelect();

}

} else

// 这里mMoveLen / Math.abs(mMoveLen)是为了保有mMoveLen的正负号,以实现上滚或下滚

mMoveLen = mMoveLen - mMoveLen / Math.abs(mMoveLen) * SPEED;

invalidate();

}

};

public PickerScrollView(Context context) {

super(context);

init();

}

public PickerScrollView(Context context, AttributeSet attrs) {

super(context, attrs);

init();

}

public void setOnSelectListener(onSelectListener listener) {

mSelectListener = listener;

}

private void performSelect() {

if (mSelectListener != null)

mSelectListener.onSelect(mDataList.get(mCurrentSelected));

}

public void setData(List datas) {

mDataList = datas;

mCurrentSelected = datas.size() / 2;

invalidate();

}

/**

  • 选择选中的item的index

  • @param selected

*/

public void setSelected(int selected) {

mCurrentSelected = selected;

int distance = mDataList.size() / 2 - mCurrentSelected;

if (distance < 0)

for (int i = 0; i < -distance; i++) {

moveHeadToTail();

mCurrentSelected–;

}

else if (distance > 0)

for (int i = 0; i < distance; i++) {

moveTailToHead();

mCurrentSelected++;

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

为、OPPO等大厂,18年进入阿里一直到现在。**

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-O1TbzZIn-1710933614907)]
[外链图片转存中…(img-QuAacthi-1710933614907)]
[外链图片转存中…(img-pAjLVGoY-1710933614908)]
[外链图片转存中…(img-5VQJIYX9-1710933614908)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-qG7GPCSE-1710933614909)]

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOSAndroid测试是移动应用程序测试领域中非常重要的两个方面。在面试过程中,一些常见的问题包括: 1. 你如何测试iOSAndroid应用程序? 在测试iOSAndroid应用程序时,首先要了解应用程序的功能需求和设计。然后使用相应的测试工具和设备,如Xcode和iOS模拟器进行iOS应用程序测试,使用Android Studio和模拟器进行Android应用程序测试。通过测试不同的功能和页面,包括用户界面、功能模块、设备兼容性和性能等方面,以确保应用程序的质量和稳定性。 2. 在iOSAndroid应用程序测试中,你如何处理兼容性问题? 在测试兼容性时,需要考虑不同版本的iOSAndroid操作系统以及各种不同的设备。为了解决这个问题,可以使用真实的设备进行测试,确保测试涵盖不同的操作系统版本和设备型号。此外,还可以利用各种移动测试工具,如Appium和Calabash等,来模拟并测试不同设备和操作系统环境下的应用程序。 3. 你在测试iOSAndroid应用程序时使用哪些自动化测试工具? 在测试iOSAndroid应用程序时,常用的自动化测试工具包括Appium、Calabash、KIF和Espresso等。这些工具可以自动化执行常见的测试任务,如界面操作、功能验证和性能测试等,并生成详细的测试报告。通过使用自动化工具,可以提高测试效率并减少测试人员的工作负担。 4. 如何测试应用程序的性能? 在测试应用程序的性能时,可以使用工具如Xcode Instruments和Android Profiler来监测应用程序的CPU、内存、网络和电池等方面的性能表现。同时,可以模拟不同的网络环境和设备压力来测试应用程序的性能稳定性。此外,还可以针对应用程序的不同功能和场景进行负载测试和压力测试,以验证其在高负载环境下的性能表现。 总而言之,测试iOSAndroid应用程序需要综合考虑功能、兼容性和性能等方面的测试,并利用相应的测试工具和设备来保证应用程序的质量和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值