android view.sety没效果,android

我想在本机Android中创建2种图像类型的应用程序之间的差异。

我使用并排显示2张图像的自定义视图来完成此操作,并找到图像的触摸位置(X,Y)及其工作方式。 但是,一旦我在其他设备上尝试,(X,Y)就会改变。

在一个设备上,位图是(600 x 500) ,在另一个设备上是(800 x 700) 。 我该怎么做才能使所有设备上的宽高比保持6:5 ? 有没有其他替代方法可以做这种应用?

这是我的XML布局的一部分。

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:orientation="vertical">

android:id="@+id/signature_canvas"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_weight="1"

android:background="@drawable/scene_2"

/>

android:id="@+id/iv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/ring"

android:visibility="invisible" />

android:id="@+id/iv_a"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/ring"

android:visibility="invisible" />

这是我的java onTouch代码。

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (v.getId()) {

case R.id.signature_canvas:

x0 = event.getX();

y0 = event.getY();

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

CanvasView.startTouch(x0, y0);

break;

case MotionEvent.ACTION_MOVE:

CanvasView.moveTouch(x0, y0);

break;

case MotionEvent.ACTION_UP:

CanvasView.upTouch();

Toast.makeText(this, "X_Value_" + x0 + "_Y_Value_" + y0, Toast.LENGTH_SHORT).show();

if (x0 > MyConstant.x0_min && x0 < MyConstant.x0_max && y0 > MyConstant.y0_min && y0 < MyConstant.y0_max)

{

iv.setX(((MyConstant.x0_max+MyConstant.x0_min)/2));

iv.setY(((MyConstant.y0_max+MyConstant.y0_min)/2));

iv.setVisibility(View.VISIBLE);

iv1.setX(((MyConstant.x0_max+MyConstant.x0_min)/2));

iv1.setY(((MyConstant.y0_max+MyConstant.y0_min)/2));

iv1.setVisibility(View.VISIBLE);

}

if (x0 > MyConstant.x0_min1 && x0 < MyConstant.x0_max1 && y0 > MyConstant.y0_min1 && y0 < MyConstant.y0_max1)

{

iv_a.setX(((MyConstant.x0_max1+MyConstant.x0_min1)/2));

iv_a.setY(((MyConstant.y0_max1+MyConstant.y0_min1)/2));

iv_a.setVisibility(View.VISIBLE);

iv_a1.setX(((MyConstant.x0_max1+MyConstant.x0_min1)/2));

iv_a1.setY(((MyConstant.y0_max1+MyConstant.y0_min1)/2));

iv_a1.setVisibility(View.VISIBLE);

}

break;

}

break;

}

return true;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解释代码package com.example.myapplication_7; import android.annotation.SuppressLint; import android.os.Handler; import android.os.Message; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import java.util.Random; public class MainActivity extends AppCompatActivity { public static final int MSG_CODE = 87987987; public static final int MAX_NUMBER = 20; public static final int RANDOM_NUMBER = 500; private TextView result_View,cd_view; private Button start_Btn; private ImageView diglet_View; private int totalCount,hitCount,steps,delayTime; private int[][] position_Array; //将消息传给主线程 private Handler handler = new Handler(){ @SuppressLint("HandlerLeak") @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); switch (msg.what){ case MSG_CODE: //点击次数大于20时游戏结束 if (totalCount > MAX_NUMBER){ clear(); //游戏结束,Toast弹窗提示 Toast.makeText(MainActivity.this, "游戏结束", Toast.LENGTH_SHORT).show(); return; } int cc = MAX_NUMBER-totalCount; cd_view.setText("已出现了"+totalCount+"只地鼠,还剩"+cc+"只地鼠"); steps = msg.arg1; MainActivity.this.diglet_View.setX(MainActivity.this.position_Array[steps][0]); MainActivity.this.diglet_View.setY(MainActivity.this.position_Array[steps][1]); MainActivity.this.diglet_View.setVisibility(View.VISIBLE); int randomTime = new Random().nextInt(RANDOM_NUMBER) + RANDOM_NUMBER; MainActivity.this.code(randomTime); break; } } };
05-29

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值