ViewFlipper上已经实现了动态添加页数,并且每页动态放入TextView。问题:如何依据手在TextView上滑动的距离来判断是要跳转Activity来查看TextView上的内容,还是要将ViewFlipper翻页。现在就差这个判断了,我打算用滑动的距离的长短来判断,总是做不出来,目前的代码是这样的,现在就差红色部分的相结合,并且TextView监听器的位置不知道怎么放,我总是只能给最后一个添加进ViewFlipper的TextView添加监听,但之前添加的好像就失效了,可能是被覆盖了监听。。package com.test.sammie;import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;import com.or.service.MessageServer;
public class DialogActivity extends Activity implements OnClickListener,OnGestureListener,OnTouchListener {
private Button btnCencel=null;
private TextView tv=null;
private Button btnCheck=null;
private ViewFlipper flipper;
private GestureDetector detector;
private TextView showPageNow=null;
private static int pageNow=1;
private static int total=0; private float down,up,cha; @Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog);
btnCencel=(Button)this.findViewById(R.id.btncencel);
btnCheck=(Button)this.findViewById(R.id.btncheck);
flipper=(ViewFlipper)this.findViewById(R.id.ViewFlipper);
showPageNow=(TextView)this.findViewById(R.id.pageNow);
detector = new GestureDetector(this);
flipper.setOnClickListener(this);
btnCencel.setOnClickListener(this);
btnCheck.setOnClickListener(this);
IntentFilter filter = new IntentFilter();
filter.addAction("Broadcast one!");
registerReceiver(mReceiver, filter);
flipper.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
init();
}
private void init(){
String openOne=this.getIntent().getStringExtra("text");
if(openOne!=null){
tv=(TextView)addTextByText(openOne);
tv.setTag(openOne);
flipper.addView(tv); total++;
showPageNow.setText(1+"/"+total);
}
}
@Override
public void onClick(View v) {
if(v==btnCencel){
Intent intent_close=new Intent();
intent_close.setAction("com.or.sammie");
stopService(intent_close);
MessageServer messageServer=new MessageServer();
messageServer.setI(0);//为了重启次Activity
Intent intent_start=new Intent();
intent_start.setAction("com.or.sammie");
startService(intent_close);
pageNow=1;
total=0;
this.finish();
}
if(v==btnCheck){
Intent intent=new Intent(DialogActivity.this,Preview.class);
Bundle bundle=new Bundle();
bundle.putString("text", flipper.getCurrentView().getTag().toString());
intent.putExtras(bundle);
this.startActivity(intent);
}
if(v.getId()==flipper.getId()){
if(Math.abs(up-down)<50){
Intent intent=new Intent(DialogActivity.this,Preview.class);
Bundle bundle=new Bundle();
bundle.putString("text", flipper.getCurrentView().getTag().toString());
intent.putExtras(bundle);
this.startActivity(intent);
}
}
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
super.onNewIntent(intent);
} protected BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals("Broadcast one!")){
Bundle bundle = intent.getExtras();
if(bundle!=null){
String text=bundle.getString("text");
Toast.makeText(context, "新消息!", 0).show();
tv=(TextView)addTextByText(text);
tv.setTag(text);
flipper.addView(tv);
total++;
showPageNow.setText(pageNow+"/"+total);
}
}
}
};
@Override
protected void onDestroy(){
this.unregisterReceiver(mReceiver);
super.onDestroy();
}
//--------------------------滑动---------------------------------
public View addTextByText(String text){
TextView tv = new TextView(this);
tv.setText(text);
tv.setGravity(1);
tv.setTextSize(18);
Drawable dr = this.getResources().getDrawable(android.R.drawable.dialog_frame);
tv.setBackgroundDrawable(dr);
tv.getBackground().setAlpha(100);
LayoutParams layoutParams = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(layoutParams);
tv.setGravity(Gravity.LEFT);
return tv;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if(e1.getX()-e2.getX()>120) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
this.flipper.showNext();
if(pageNow==flipper.getChildCount()){
pageNow=1;
}else{
pageNow++;
}
showPageNow.setText(pageNow+"/"+total);
return true;
}else if(e2.getX()-e1.getX()>-120) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
this.flipper.showPrevious();
if(pageNow==1){
pageNow=flipper.getChildCount();
}else{
pageNow--;
}
showPageNow.setText(pageNow+"/"+total);
return true;
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if(v==tv){
if (event.getAction() == MotionEvent.ACTION_DOWN) {
down=event.getX();
Log.i("down", down+"");
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
} else if (event.getAction() == MotionEvent.ACTION_UP) {
up=event.getX();
Log.i("up", up+"");
}
}
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return this.detector.onTouchEvent(event);
};
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
}
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;import com.or.service.MessageServer;
public class DialogActivity extends Activity implements OnClickListener,OnGestureListener,OnTouchListener {
private Button btnCencel=null;
private TextView tv=null;
private Button btnCheck=null;
private ViewFlipper flipper;
private GestureDetector detector;
private TextView showPageNow=null;
private static int pageNow=1;
private static int total=0; private float down,up,cha; @Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog);
btnCencel=(Button)this.findViewById(R.id.btncencel);
btnCheck=(Button)this.findViewById(R.id.btncheck);
flipper=(ViewFlipper)this.findViewById(R.id.ViewFlipper);
showPageNow=(TextView)this.findViewById(R.id.pageNow);
detector = new GestureDetector(this);
flipper.setOnClickListener(this);
btnCencel.setOnClickListener(this);
btnCheck.setOnClickListener(this);
IntentFilter filter = new IntentFilter();
filter.addAction("Broadcast one!");
registerReceiver(mReceiver, filter);
flipper.setInAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_in));
flipper.setOutAnimation(AnimationUtils.loadAnimation(this,android.R.anim.fade_out));
init();
}
private void init(){
String openOne=this.getIntent().getStringExtra("text");
if(openOne!=null){
tv=(TextView)addTextByText(openOne);
tv.setTag(openOne);
flipper.addView(tv); total++;
showPageNow.setText(1+"/"+total);
}
}
@Override
public void onClick(View v) {
if(v==btnCencel){
Intent intent_close=new Intent();
intent_close.setAction("com.or.sammie");
stopService(intent_close);
MessageServer messageServer=new MessageServer();
messageServer.setI(0);//为了重启次Activity
Intent intent_start=new Intent();
intent_start.setAction("com.or.sammie");
startService(intent_close);
pageNow=1;
total=0;
this.finish();
}
if(v==btnCheck){
Intent intent=new Intent(DialogActivity.this,Preview.class);
Bundle bundle=new Bundle();
bundle.putString("text", flipper.getCurrentView().getTag().toString());
intent.putExtras(bundle);
this.startActivity(intent);
}
if(v.getId()==flipper.getId()){
if(Math.abs(up-down)<50){
Intent intent=new Intent(DialogActivity.this,Preview.class);
Bundle bundle=new Bundle();
bundle.putString("text", flipper.getCurrentView().getTag().toString());
intent.putExtras(bundle);
this.startActivity(intent);
}
}
}
@Override
protected void onNewIntent(Intent intent) {
setIntent(intent);
super.onNewIntent(intent);
} protected BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(action.equals("Broadcast one!")){
Bundle bundle = intent.getExtras();
if(bundle!=null){
String text=bundle.getString("text");
Toast.makeText(context, "新消息!", 0).show();
tv=(TextView)addTextByText(text);
tv.setTag(text);
flipper.addView(tv);
total++;
showPageNow.setText(pageNow+"/"+total);
}
}
}
};
@Override
protected void onDestroy(){
this.unregisterReceiver(mReceiver);
super.onDestroy();
}
//--------------------------滑动---------------------------------
public View addTextByText(String text){
TextView tv = new TextView(this);
tv.setText(text);
tv.setGravity(1);
tv.setTextSize(18);
Drawable dr = this.getResources().getDrawable(android.R.drawable.dialog_frame);
tv.setBackgroundDrawable(dr);
tv.getBackground().setAlpha(100);
LayoutParams layoutParams = new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(layoutParams);
tv.setGravity(Gravity.LEFT);
return tv;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
if(e1.getX()-e2.getX()>120) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
this.flipper.showNext();
if(pageNow==flipper.getChildCount()){
pageNow=1;
}else{
pageNow++;
}
showPageNow.setText(pageNow+"/"+total);
return true;
}else if(e2.getX()-e1.getX()>-120) {
this.flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
this.flipper.showPrevious();
if(pageNow==1){
pageNow=flipper.getChildCount();
}else{
pageNow--;
}
showPageNow.setText(pageNow+"/"+total);
return true;
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
if(v==tv){
if (event.getAction() == MotionEvent.ACTION_DOWN) {
down=event.getX();
Log.i("down", down+"");
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
} else if (event.getAction() == MotionEvent.ACTION_UP) {
up=event.getX();
Log.i("up", up+"");
}
}
return true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return this.detector.onTouchEvent(event);
};
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货