Так что это оказалось немного сложнее, чем я думал, но теперь он работает почти правильно.
Вот 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 (), который я использую внутри адаптера для возврата представлений, отображаемых в списке:
@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);это линии, которые настраивают вид с помощью Слушателей, которые я показывал выше.
Теперь о bubblelight1.bubblelight и bubbledark - это девять патчей-изображений, которые я использую, когда я пробовал это в первый раз, когда начинался переход, а не фон, переходящий от пузырькового света к пузырьковому, пузырьковый свет становился больше, и пузырьковый дым появлялся внутри пузырькового света.Итак, у меня был большой светлый пузырь, маленький темный пузырь, а затем текст внутри него.Чтобы решить эту проблему, я сделал копию пузырькового света и полностью заправил нижний и правый края девятисекции. Мне просто нужно было сделать первое изображение при переходе, а не второе.Если бы я сделал второе изображение таким образом, мой текст выпрыгнул бы из пузыря, а некоторые из них были бы показаны сверху и по бокам пузыря.Я не совсем уверен, почему это происходило или почему это исправление сработало.Но это делает работу на данный момент.