触摸屏幕时,使图像高度不断增加

时间:2013-09-05 15:33:01

标签: android timer ontouchevent

我在相对布局中有一个图像,在图像下面有一个线性布局。这个图像是透明的,所以看起来没什么。

我的代码为线性布局添加了3个文本视图。

我有它,所以当我在屏幕上移动手指时,它会放大图像的高度,从而给人一种线性布局向下移动的印象。

我希望得到它,以便在触摸屏幕时,即使取景器静止,图像也会变大,使图像看起来像是在屏幕上移动。当手指被移除时,图像停止放大。

我一直在尝试创建一个线程来运行onTouchEvent大约两周,但我的代码似乎让应用程序崩溃了。

有人可以修改我的代码/添加此功能,以便我可以看到我出错的地方。我希望我不是把线程放在正确的位置,或者我没有正确停止线程导致它崩溃。

我的布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    android:id="@+id/LinearLayout"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/Spacer"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:contentDescription="Spacer"
        android:src="@drawable/ic_launcher" />

    <LinearLayout 
        android:id="@+id/Letters"
        android:orientation="horizontal"
        android:layout_below="@id/Spacer"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin" >

    </LinearLayout>

</RelativeLayout>

我的活动

package com.example.zz;

import android.app.Activity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class MainActivity extends Activity {

    protected int splashTime = 3000;

    TextView tv1;
    ImageView spacer;
    String[] name = {"Hello","Rich","You","Hero"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String[] letters = {"A","B","C"};
        String letter = "";
        String nextLetters = "";

        for( int i = 0; i < letters.length; i++)
        {
            letter = letters[i];
            nextLetters = nextLetters + letter;

            // Create a textView in code
            LayoutParams paramsExample = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1);
            View linearLayout =  findViewById(R.id.Letters);
            TextView tv1 = new TextView(this); 
            tv1.setText(letter); 
            tv1.setLayoutParams(paramsExample);
            tv1.setGravity(Gravity.CENTER);
            ((LinearLayout) linearLayout).addView(tv1);
        } 
    }


    @Override
    public boolean onTouchEvent(MotionEvent e) {

        switch (e.getAction()) {
            case MotionEvent.ACTION_MOVE:
                spacer = (ImageView) findViewById(R.id.Spacer);

                RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)spacer.getLayoutParams();
                head_params.height = 400;
                spacer.setLayoutParams(head_params);

        }
        return true;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

我只是使用启动图标作为图像。

任何帮助都会让我的脱发变得容易,多亏了提前。

1 个答案:

答案 0 :(得分:1)

您可以设置一个false的布尔值。如果调用ACTION_MOVE,则将其设置为true,并在调用ACTION_UP时再次将其设置为false。

然后使用处理程序

每隔x毫秒调用一次运行

实现runnable并分配处理程序

    private Handler handler = new Handler();

在创建时:

    handler.postDelayed(this,TIME);

然后调用run:

    @Override
    public void run(){
         if (yourboolean == true){
              spacer = (ImageView) findViewById(R.id.Spacer);

              RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)spacer.getLayoutParams();
              head_params.height += 100;
              spacer.setLayoutParams(head_params);   

         }

         handler.postDelayed(this,TIME);
    }