AAD*_*ing 13 android onclick android-snackbar
下面的简单代码显示Snackbar.
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_INDEFINITE)
.setAction("Action", null).show();
}
Run Code Online (Sandbox Code Playgroud)
onClick事件发生时,此代码正确显示Snackbar .
此外,这个小吃店可以通过轻扫手势解散.
但默认情况下,只有右键滑动才会关闭Snackbar.我无法用左键轻扫它.
如何在左侧轻扫时解雇小吃吧?
另一种简单而干净的方法可能如下:
val behavior = BaseTransientBottomBar.Behavior().apply {
setSwipeDirection(SwipeDismissBehavior.SWIPE_DIRECTION_ANY)
}
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_INDEFINITE)
.setBehavior(behavior)
.show()
Run Code Online (Sandbox Code Playgroud)
有了这个,你不需要检查和转换布局参数,也不需要使用onShown回调。
希望这会有所帮助:
OnSwipeTouchListener.java:
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class OnSwipeTouchListener implements OnTouchListener {
private final GestureDetector gestureDetector;
public OnSwipeTouchListener (Context ctx){
gestureDetector = new GestureDetector(ctx, new GestureListener());
}
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
private final class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
boolean result = false;
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
}
result = true;
}
else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeBottom();
} else {
onSwipeTop();
}
}
result = true;
} catch (Exception exception) {
exception.printStackTrace();
}
return result;
}
}
public void onSwipeRight() {
}
public void onSwipeLeft() {
}
public void onSwipeTop() {
}
public void onSwipeBottom() {
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用:在MainActivity上
public class MainActivity extends AppCompatActivity {
CoordinatorLayout coordinatorLayout;
private Snackbar snackbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
coordinatorLayout = (CoordinatorLayout)findViewById(R.id.coordinatorLayout);
snackbar = Snackbar
.make(coordinatorLayout, "Replace with your own action", Snackbar.LENGTH_INDEFINITE)
.setAction("RETRY", null);
snackbar.setActionTextColor(Color.RED);
View sbView = snackbar.getView();
TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(Color.YELLOW);
snackbar.show();
textView.setOnTouchListener(new OnSwipeTouchListener(MainActivity.this)
{
public void onSwipeTop() {
}
public void onSwipeRight() {
}
public void onSwipeLeft() {
snackbar.dismiss();
}
public void onSwipeBottom() {
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
snackBar这将在向左滑动时关闭(但在向左滑动时没有该动画)
getView()并采取snackBar布局setOnTouchListener完成了!
public class HomeActivity extends AppCompatActivity {
private float x1,x2;
static final int MIN_DISTANCE = 150;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.rel);
final Snackbar snackbar = Snackbar.make(relativeLayout, "Helloo", Snackbar.LENGTH_INDEFINITE);
Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView();
layout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
x1 = event.getX();
break;
case MotionEvent.ACTION_UP:
x2 = event.getX();
float deltaX = x2 - x1;
if (Math.abs(deltaX) > MIN_DISTANCE)
{// Left to Right swipe action
if (x2 > x1)
{
Toast.makeText(HomeActivity.this, "Left to Right swipe ", Toast.LENGTH_SHORT).show ();
}
// Right to left swipe action
else
{
Toast.makeText(HomeActivity.this, "Right to Left swipe ", Toast.LENGTH_SHORT).show ();
snackbar.dismiss();
}
}
else
{
Toast.makeText(HomeActivity.this, "Tap or Else", Toast.LENGTH_SHORT).show ();
}
break;
}
return false;
}
});
snackbar.show();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |