事实证明,这比我想象的要困难一些,但现在我已经将其几乎正确地运行。
这是我最终使用的OnTouchListener:
listOnTouchListener = new OnTouchListener() {
public boolean onTouch(View v, MotionEvent me){
if (me.getAction() == MotionEvent.ACTION_DOWN){
Log.i(myTag, "Action Down");
Context mContext = getApplicationContext();
Resources res = mContext.getResources();
TransitionDrawable transition = (TransitionDrawable) res.getDrawable(R.drawable.listtransition);
v.setBackgroundDrawable(transition);
transition.startTransition(500);
}else if (me.getAction() == MotionEvent.ACTION_UP){
v.setBackgroundResource(R.drawable.bubblelight);
}else if (me.getAction() == MotionEvent.ACTION_MOVE){
}else if (me.getAction() == MotionEvent.ACTION_CANCEL){
Log.i(myTag, "Action Cancel");
v.setBackgroundResource(R.drawable.bubblelight);
}
return false;
}
};
我在其中使用了OnLongClickListener,然后将背景恢复为正常状态。
以下是Transition XML:
<transition xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/bubblelight1" />
<item android:drawable="@drawable/bubbledark" />
</transition>
你可能会问什么是bubblelight1?稍后再说。
这里是我在适配器中使用的getView()方法,用于返回在列表中显示的视图:
@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()));
}
}
LinkifyWithTwitter.addLinks(tweetTxt, Linkify.ALL);
return v;
}
v.setOnTouchListener(listOnTouchListener); 和 v.setOnLongClickListener(listOnLongClickListener); 这两行代码设置了视图与我上面展示的监听器。
现在说一下bubblelight1。bubblelight和bubbledark是我第一次尝试时使用的九宫格图片。每当转换开始时,背景不是从bubblelight过渡到bubbledark,而是bubblelight变得更大,bubbledark出现在bubblelight内部。所以我有一个大的浅色气泡,一个小的深色气泡,然后是里面的文本。为了解决这个问题,我复制了bubblelight并将九宫格的底部和右侧边缘完全填充。我只需要对第一张图片进行这样的处理,而不是第二张。如果我用同样的方法处理第二张图片,那么我的文本就会跳出气泡,有些文本会显示在气泡的顶部和侧面。我不完全确定为什么会发生这种情况,或者为什么这个修复方法起作用。但是现在它可以完成工作了。