gpt4 book ai didi

android - 选择器的 ListView 项目 LongClick 状态

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:27 25 4
gpt4 key购买 nike

在默认的 ListViews 上,如果您长按某个项目,背景会在注册 LongClick 期间从深蓝色变为浅蓝色(在 Galaxy Tab 上。在某些其他设备上为橙色到浅橙色)。我假设这是通过选择器以某种方式完成的,但到目前为止,我只看到了如何将选择器用于 state:selected、state:focused 和 state:pressed。

This page似乎没有显示有关 LongClick 状态的任何信息,所以也许我认为这是通过选择器完成的假设是不正确的?

谁能告诉我默认的 ListView 如何获得这种效果以及我如何将它应用到其他 View ?

最佳答案

结果证明它比我想象的要难一点,但我现在几乎可以正常工作了。

这是我最终使用的 OnTouchListener:

listOnTouchListener = new OnTouchListener() {
public boolean onTouch(View v, MotionEvent me){
if (me.getAction() == MotionEvent.ACTION_DOWN){
//This means a finger has come down on top of our view
//We are going to start the animation now.
Log.i(myTag, "Action Down");
Context mContext = getApplicationContext();
Resources res = mContext.getResources();
TransitionDrawable transition = (TransitionDrawable) res.getDrawable(R.drawable.listtransition);
v.setBackgroundDrawable(transition);
//LongClick took approx. 510-530 milliseconds to register after OnTouch. So I set the duration at 500 millis.
transition.startTransition(500);
}else if (me.getAction() == MotionEvent.ACTION_UP){
//This means we didn't hold long enough to get a LongClick
//Set the background back to the normal one.
v.setBackgroundResource(R.drawable.bubblelight);

}else if (me.getAction() == MotionEvent.ACTION_MOVE){
//Do Nothing
}else if (me.getAction() == MotionEvent.ACTION_CANCEL){
Log.i(myTag, "Action Cancel");
//This means we are scrolling on the list, not trying to longpress
//So set the background back to the normal one.
v.setBackgroundResource(R.drawable.bubblelight);
}
return false;

}
};

我还在其中使用了一个 OnLongClickListener,我将背景设置回正常背景。

这是转换 XML:

<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bubblelight1" />
<item android:drawable="@drawable/bubbledark" />
</transition>

您可能会问 bubblelight1 是怎么回事?稍后会详细介绍。

这是我在适配器内部使用的 getView() 方法,用于返回显示在列表中的 View :

@Override
public View getView(int position, View convertView, ViewGroup parent) {
v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.row, null);
}
Status s = items.get(position);
if (s != null) {
v.setOnTouchListener(listOnTouchListener);
v.setOnLongClickListener(listOnLongClickListener);
tweetTxt = (TextView) v.findViewById(R.id.tweetTxt);
timeTxt = (TextView) v.findViewById(R.id.timeTxt);
if (tweetTxt != null) {
tweetTxt.setText(s.getText());
tweetTxt.setOnTouchListener(gestureListener);
}
if(timeTxt != null){
timeTxt.setText(getTimeFromNow(s.getCreatedAt().getTime()));
//timeTxt.setText(s.getCreatedAt().toLocaleString());
}
}
LinkifyWithTwitter.addLinks(tweetTxt, Linkify.ALL);
return v;
}

v.setOnTouchListener(listOnTouchListener);和v.setOnLongClickListener(listOnLongClickListener);是用上面显示的监听器设置 View 的行。

现在介绍 bubblelight1。 bubblelight 和 bubbledark 是我第一次尝试时使用的 9-patch 图像,每当过渡开始而不是背景从 bubblelight 过渡到 bubbledark 时,bubblelight 会变大,而 bubbledark 会出现在 bubblelight 内部。所以我有一个浅色的大气泡,一个深色的小气泡,然后是里面的文字。为了解决这个问题,我制作了一个 bubblelight 的副本,并完全填充了 ninepatch 的底部和右侧边缘。不过,我只需要在过渡中制作第一张图像,而不是第二张图像。如果我以这种方式制作第二张图片,那么我的文字会跳出气泡,有些文字会显示在气泡的顶部和两侧。我不完全确定为什么会发生这种情况,或者为什么此修复程序恰好起作用。但它现在可以完成工作。

关于android - 选择器的 ListView 项目 LongClick 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4768977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com